27

从 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.

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

4

2 回答 2

34

也许你的意思是:

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

我认为应该等同于if-else您的条件

例如

>>> 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 的值,则or返回第二个)。

如果您的默认值是一个函数,那么如果您将其编写为: d.get('foo',func()) or func(). 在这种情况下,最好使用一个临时变量来保存func.

于 2013-01-14T17:06:44.117 回答
19

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

my_value = dict.get(key) or my_default

or如果评估为非假,则将提供第一个值,否则将提供第二个值。与其他语言不同,Python 不会强制结果为布尔值,有时这是一个非常有用的属性。

于 2013-01-14T17:20:58.207 回答