Python dict.get()或None场景

时间:2016-05-11 14:17:31

标签: python dictionary

我正在尝试根据我拥有的密钥列表访问字典的值。如果密钥不存在,我默认为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)

3 个答案:

答案 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

xz的值为0,而y的值为1。

dict.get() returns None by default

或使用defaultdict