如何判断字典中是否存在非空字符串?

How to determine if a non-empty string exists in a dictionary?

我经常发现自己在 python 中检查字典以查看字典中是否有某个键以及该键是否包含有用的信息(在我的例子中,是一个非零长度的字符串)。例如,我似乎经常需要检查 kwargs 中的数据,如下所示:

if ('partition' not in kwargs or kwargs['partition'] is None
    or kwargs['partition'] == ""):
    raise Exception("Need 'partition' for this method")

是否有我缺少的更简单直接的方法?

使用字典对象的 get() 方法并让 Python 自动确定它的 truthiness:

if not d.get('partition'):
    raise Exception("Need 'partition' for this method")

哪种方法是 Pythonic 可能取决于字典内容是内部接口还是外部接口。

如果您正在编写一个库,处理从命令行或文件中读取的字典内容,或者您​​程序员不负责内容的类似内容,您会想要做一些您喜欢的事情在 OP 中编写为良好的防御性编程实践。如果这是您的代码中足够常见的习语,您可能想要编写一个函数来提供类似的处理,同时泛化您要查找的特定键,例如:

def key_contains_contents(user_dict, key):
    return (key in user_dict) and user_dict[key] and len(user_dict[key]) > 0

根据需要添加附加条款。

如果dict的内容是你的程序自己创建的,你不妨想出一个标准的方式来表达一个key是否包含有意义的数据,并坚持下去。您正在解决的具体问题可能会提出一种或另一种方法,使创建 dict 的代码更简单。虽然没有任何其他限制,但首先不设置密钥似乎是最简单的。