用Pythonic方法检查空字典和空值

2024-03-29 00:05:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用这类字典,它们可以是或完全是空的,比如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()),但这对集合a不起作用,它将返回True

您也可以检查bool(collection_a.values()),但这对collection-b不起作用,它将返回True。。。

有没有一种独特的方法包括这两种情况?


Tags: 方法testtruereturn字典isdef水平
3条回答

因为:

>>> 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")

使用any进行测试,因为空的dict是falsy:

>>> collection_a = {}
>>> collection_b = {"test": {}}
>>> any(collection_a.values())
False
>>> any(collection_b.values())
False

这假设dictionary值始终是dictionary。

如果您想检查字典是否有值,以及所有值(如果有)是否为“truthy”,只需结合您的两个测试:

bool(collection) and all(collection.values())

(第一部分中的bool是可选的,但是没有它,如果字典是空的,您将得到一个unintuitive{}。)

当然,如果您只想检查集合中的任何值是否为“truthy”(这一点在您的问题中并不完全清楚),那么您所要做的就是any(collection),正如其他答案中所述;这同时还将检查集合是否为非空。

相关问题 更多 >