Pythonic方式检查空字典和空值

lap*_*ira 4 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())
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 ...

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

Mos*_*oye 8

测试any,因为空的dicts假的:

>>> collection_a = {}
>>> collection_b = {"test": {}}
>>> any(collection_a.values())
False
>>> any(collection_b.values())
False
Run Code Online (Sandbox Code Playgroud)

这假设字典值始终是字典.

  • 目前尚不清楚这对其他假值是否正确,例如`collection_c = {3:0}` (3认同)
  • @Chris_Rands。我认为OP意味着第一级值将始终是dict(如果有的话)。 (2认同)

tob*_*s_k 5

如果要检查字典是否具有值,以及所有值(如果有)是否为"真实",只需将两个测试结合起来:

bool(collection) and all(collection.values())
Run Code Online (Sandbox Code Playgroud)

(bool第一部分是可选的,如果没有它,{}如果字典为空,你会得到一个不直观的.)

当然,如果您只想检查集合中的任何值是否"真实"(这在您的问题中并不完全清楚),您所要做的就是any(collection),如其他答案中所述; 这将同时检查集合是否为非空.