找不到循环的特定字典元素

时间:2013-05-27 19:45:57

标签: python

在python中是否有办法检查任何字典元素是否在特定键上具有特定值,而不是遍历整个字典?

因此,在以下示例中:

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

如果有任何名为'Dave'的元素,我想得到一个真/假答案

2 个答案:

答案 0 :(得分: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']

答案 1 :(得分:1)

试试这个:"Dave" in d.values()其中d是你的字典。

由于您有一个词典列表,请尝试:

any(d.get("Name") == "Dave" for d in my_dicts)。如果其中一个词典没有键"Name",则会处理它(它会返回NoneNone != "Dave")。