在迭代字典列表时查找与给定键不同的键

时间:2017-06-08 08:15:39

标签: python dictionary

我有词典列表,其中每个词典都存在密钥site。 换句话说,此代码返回True

all('site' in site for site in summary)

问题是,如果在任何字典中存在与True不同的密钥,那么迭代字典列表并返回site的pythonic方法是什么?

示例:在以下列表中,我想返回True,因为上一本词典中存在cost但我无法告诉我们将是另一个键,它可以是示例中的cost,它可以是其他字符串;这个问题的随机密钥。

[
    {"site": "site_A"},
    {"site": "site_B"},
    {"site": "site_C", "cost": 1000}
]

3 个答案:

答案 0 :(得分:7)

如果所有字典都有密钥site,则字典的长度至少为1. 任何其他密钥的存在会使字典大小增加到大于1,测试为此:

any(len(d) > 1 for d in summary)

答案 1 :(得分:2)

您可以检查每个字典dct

any(key != "site" for key in dct)

如果您想检查这个词典列表dcts,请在any附近推送另一个any(any(key != "site" for key in dct) for dct in dcts)

这也使得它可以轻松扩展以允许多个不同的密钥。 (例如any(key not in ("site", "otherkey") for key in dct))因为如果只能使用一个密钥,那么字典是否适用?

答案 2 :(得分:0)

这是一个更长的版本,但它可以满足您的需求。只是为了提供更多选择:

any({k: v for k, v in site.items() if k != 'site'} for site in summary)