我正在使用这些词典,它们可以是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())
或
def is_empty(collection):
return not bool(collection.values())
是否有一种独特的方法来检查a或b是否有值?
您可以检查all(collection_b.values())
但不适用于collection_a,它将返回True
你也可以检查bool(collection_a.values())
,但是对于collection_b,它将返回True ...
是否有一种独特的方式来包含这两种情况?
答案 0 :(得分:6)
使用any
进行测试,因为空的dicts falsy :
>>> collection_a = {}
>>> collection_b = {"test": {}}
>>> any(collection_a.values())
False
>>> any(collection_b.values())
False
这假设字典值始终是字典。
答案 1 :(得分:5)
如果您想检查词典是否具有值,以及 all 值是否为" truthy",只需合并您的两个测试:
bool(collection) and all(collection.values())
(第一部分中的bool
是可选的,但如果没有它,如果字典为空,则会得到一个不直观的{}
。)
当然,如果您只想检查集合中的任何值是否为" truthy" (你的问题并不完全清楚),所有你需要做的就是any(collection)
,正如其他答案所述;这将同时检查集合是否为非空。
答案 2 :(得分:1)
因为:
>>> dict={}
>>> not dict
True
所以你可以这样检查:
collection_a = {"hello":1,"bye":2}
if collection_a:
#do your stuff
print("not empty")
collection_a = {}
if collection_a:
print("dict is not empty")
如果你想检查dict a或dict b,那么:
if collection_a or collection_b:
print("not empty")
答案 3 :(得分:0)
或者,bool()
与more-itertools' collapse()
:
import more_itertools
def has_value(thing):
return bool(*more_itertools.collapse(thing))
>>> has_value({})
False
>>> has_value({''})
False
>>> has_value({0:['']})
False
>>> has_value({'test':[]})
True