我正在尝试根据我拥有的密钥列表访问字典的值。如果密钥不存在,我默认为None。但是,当值为空字符串时,我遇到了麻烦。''。请参阅下面的代码了解我的示例
dict = {}
dict['key'] = ''
test = dict.get('key')
print(test)
>>
上面是预期的,打印空字符串。但是现在看看当我将dict.get()函数默认为None时如果键不存在会发生什么
dict = {}
dict['key'] = ''
test = dict.get('key') or None
print(test)
>> None
为什么会这样?在第二个例子中,密钥存在,所以我的直觉说''应该打印。 Python如何应用'或'那行代码的子句?
以下是我用来访问字典的实际代码。请注意,字典中的许多键都有''作为价值,因此我的问题。
# build values list
params = []
for col in cols:
params.append(dict.get(col) or None)
有人可以提供最好的解决方案吗?我目前的解决方案如下,但我认为这不是最干净的选择
# build values list
params = []
for col in cols:
if dict.get(col) is not None:
params.append(dict.get(col))
else:
params.append(None)
答案 0 :(得分:4)
根本不需要or None
。默认情况下,dict.get
会在字典中找不到提供的密钥时返回None
。
在这些情况下咨询documentation是个好主意:
get(key [,default])
如果key在字典中,则返回key的值,否则返回default。 如果未指定default,则默认为None ,因此此方法永远不会引发KeyError。
答案 1 :(得分:1)
你可以简单地使用get的第二个参数。
dict.get(col, None)
第二个参数是它无法找到密钥的默认值。 在那种情况下,或者在这种情况下,或者如果它是某种东西,则接受该东西,否则采取在或之后的任何东西。
答案 2 :(得分:0)
问题是在python中空字符串不被视为True。例如,看看这段代码。
>>> x = 1 if "" else 0
>>> y = 1 if True else 0
>>> z = 1 if False else 0
x
和z
的值为0,而y
的值为1。
dict.get() returns None by default
或使用defaultdict