Pythonic方式检查空字典和空值

时间:2017-10-17 14:49:41

标签: python dictionary

我正在使用这些词典,它们可以是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 ...

是否有一种独特的方式来包含这两种情况?

4 个答案:

答案 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