【发布时间】:2016-05-11 14:17:31
【问题描述】:
我正在尝试根据我拥有的键列表访问字典的值。如果密钥不存在,我默认为无。但是,当值为空字符串“”时,我遇到了麻烦。请参阅下面的代码以获取我的示例
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)
【问题讨论】:
-
对于第一个问题,空字符串在python中是假的,所以打印
or运算符的第二个选项 -
您可以简单地使用
dict.get('key')。get如果找不到密钥,则已经返回 None。 -
if dict.get(col) is not None: <use dict.get(col)> ; else: <use None which is the value of dict.get(col)>真的吗? -
可以,谢谢。我不同意它是链接问题的副本,因为我的问题主要涉及 dict.get() 函数的行为。尽管如此,很高兴这已经解决了。
-
要扩展@TadhgMcDonald-Jensen 的评论,您真的只需要
for col in cols: params.append(dict.get(col))。或者您可以进一步简化代码以使用params = [dict.get(col) for col in cols]使代码成为单行代码,或者如果cols很大并且您确实需要最后一盎司的性能,params = map(dict.get, cols)(将map调用包装在list中,如果您使用的是 Python 3 并且需要params成为真正的list,而不是可以仅迭代一次然后丢弃的惰性生成器)。旁注:不要将您的dict命名为“dict”(或任何其他内置名称);名称阴影很糟糕。
标签: python dictionary