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

新手上路,请多包涵

从 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

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

原文由 Jonathan Evans 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 407
2 个回答

也许你的意思是:

 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 的返回值。

原文由 mgilson 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

 my_value = dict.get(key) or my_default

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

原文由 Mark Ransom 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题