在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
。
有更好的方法来执行此检查吗?
答案 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不强制结果为布尔值,有时也是非常有用的属性。