1

python中有没有一种方法可以检查任何字典元素是否在特定键处具有特定值,而无需遍历整个字典?

因此,在以下示例中:

 [{
        "ID": "1",
        "Name": "Bob",
    },
    {
        "Id": "2",
        "Name": "Dave",
    },
    {
        "Id": "3",
        "Name": "Dave",
    }]

如果有任何名为“戴夫”的元素,我想得到一个真/假答案

4

2 回答 2

7

您的数据结构不支持O(1)查找,因此您仍然需要遍历它:

any(d['Name'] == 'Dave' for d in dicts)

将生成器传递给any它会使其短路,因此一旦找到元素就会停止。

如果您需要经常这样做,您可以将所有项目组合到一个查找表中:

from collections import defaultdict

total = defaultdict(set)

for d in dicts:
    for key, value in d.items():
        total[key].add(value)

现在,您可以进行O(1)查找:

'Dave' in total['Name']
于 2013-05-27T19:48:55.440 回答
1

试试这个:你的字典"Dave" in d.values()在哪里。d

由于您有字典列表,请尝试:

any(d.get("Name") == "Dave" for d in my_dicts). 如果其中一个字典没有 key "Name",它将被处理(它返回Noneand None != "Dave")。

于 2013-05-27T19:47:40.780 回答