检查密钥是否存在且其值在Python字典中不是空字符串

时间:2013-01-14 17:01:34

标签: python dictionary string

在Python字典中为键/值对分配变量是否有明确的最佳实践:

  • 如果密钥存在
  • 如果键的值不是空字符串

否则为变量指定默认值。

我想使用dict.get

my_value = dict.get(key, my_default)

但如果密钥存在且值为空字符串,则会将空字符串分配给my_value。使用以下内容是否更好:

if key in dict and dict[key]:
    my_value = dict[key]
else:
    my_value = my_default

这将利用空字符串的真实性来确保只将非空字符串分配给my_value

有更好的方法来执行此检查吗?

2 个答案:

答案 0 :(得分:22)

也许你的意思是:

a.get('foo',my_default) or my_default

我认为应该相当于你拥有的if-else条件

e.g。

>>> a = {'foo':''}
>>> a.get('foo','bar') or 'bar'
'bar'
>>> a['foo'] = 'baz'
>>> a.get('foo','bar') or 'bar'
'baz'
>>> a.get('qux','bar') or 'bar'
'bar'

与其他版本相比,这方面的优势非常明显。这很好,因为您只需要执行一次查找,因为or短路(一旦它达到类似True的值,它就会返回它。如果没有找到类似True的值,{ {1}}返回第二个)。

如果您的默认值是一个函数,如果您将其写为or,则可以被调用两次。在这种情况下,最好使用临时变量来保存d.get('foo',func()) or func()的返回值。

答案 1 :(得分:12)

做你想做的最简单的方法:

my_value = dict.get(key) or my_default

如果or评估非假,则{{1}}将传递第一个值,否则传递第二个值。与其他语言不同,Python不强制结果为布尔值,有时也是非常有用的属性。

相关问题