我正在使用这些类型的词典,它们可以是或者完全是空的,collection_a或者包含一个单级的嵌套字典,它可能是空的.它没有更多的水平.
collection_a = {}
collection_b = {"test": {}}
print is_empty(collection_a)
print is_empty(collection_b)
def is_empty(collection):
return not all(collection.values())
Run Code Online (Sandbox Code Playgroud)
要么
def is_empty(collection):
return not bool(collection.values())
Run Code Online (Sandbox Code Playgroud)
有没有一种独特的方法来检查a或b是否有值?
你可以检查all(collection_b.values())但是它不适用于collection_a,它将返回True
你也可以检查bool(collection_a.values())但是它不适用于collection_b,它将返回True ...
是不是有一种独特的方式来包含这两种情况?
测试any,因为空的dicts是假的:
>>> collection_a = {}
>>> collection_b = {"test": {}}
>>> any(collection_a.values())
False
>>> any(collection_b.values())
False
Run Code Online (Sandbox Code Playgroud)
这假设字典值始终是字典.
如果要检查字典是否具有值,以及所有值(如果有)是否为"真实",只需将两个测试结合起来:
bool(collection) and all(collection.values())
Run Code Online (Sandbox Code Playgroud)
(bool第一部分是可选的,如果没有它,{}如果字典为空,你会得到一个不直观的.)
当然,如果您只想检查集合中的任何值是否"真实"(这在您的问题中并不完全清楚),您所要做的就是any(collection),如其他答案中所述; 这将同时检查集合是否为非空.