假设connectionDetails是一个Python字典,那么像这样重构代码的最佳、最优雅、最“Python”的方式是什么呢?
if "host" in connectionDetails:
host = connectionDetails["host"]
else:
host = someDefaultValue
假设connectionDetails是一个Python字典,那么像这样重构代码的最佳、最优雅、最“Python”的方式是什么呢?
if "host" in connectionDetails:
host = connectionDetails["host"]
else:
host = someDefaultValue
当前回答
这并不是我们要问的问题,但是在python字典中有一个方法:dict.setdefault
host = connectionDetails.setdefault('host',someDefaultValue)
然而,这个方法将connectionDetails['host']的值设置为someDefaultValue,如果key host还没有定义,这与问题不同。
其他回答
对于多个不同的默认值,请尝试以下方法:
connectionDetails = { "host": "www.example.com" }
defaults = { "host": "127.0.0.1", "port": 8080 }
completeDetails = {}
completeDetails.update(defaults)
completeDetails.update(connectionDetails)
completeDetails["host"] # ==> "www.example.com"
completeDetails["port"] # ==> 8080
这并不是我们要问的问题,但是在python字典中有一个方法:dict.setdefault
host = connectionDetails.setdefault('host',someDefaultValue)
然而,这个方法将connectionDetails['host']的值设置为someDefaultValue,如果key host还没有定义,这与问题不同。
是这样的:
host = connectionDetails.get('host', someDefaultValue)
您可以使用dict.get()作为默认值。
d = {"a" :1, "b" :2}
x = d.get("a",5)
y = d.get("c",6)
# This will give
# x = 1, y = 6
# as the result
由于"a"在键中,x = d.t get("a",5)将返回相关值1。由于"c"不在键中,y = d.t get("c",6)将返回默认值6。
你也可以像这样使用defaultdict:
from collections import defaultdict
a = defaultdict(lambda: "default", key="some_value")
a["blabla"] => "default"
a["key"] => "some_value"
你可以传递任何普通函数而不是lambda:
from collections import defaultdict
def a():
return 4
b = defaultdict(a, key="some_value")
b['absent'] => 4
b['key'] => "some_value"