我有一个字典列表,我试图通过它的值来获取字典键:
list1 = [{'a':1,'b':2,'c':3},
{'d':4,'e':5,'f':6},
{'g':7,'h':8,'i':9}]
5
在这里,如果字典列表中存在该值,我将尝试获取字典键。
我有一个字典列表,我试图通过它的值来获取字典键:
list1 = [{'a':1,'b':2,'c':3},
{'d':4,'e':5,'f':6},
{'g':7,'h':8,'i':9}]
5
在这里,如果字典列表中存在该值,我将尝试获取字典键。
正如彼得·德格洛珀(Peter DeGlopper )所指出的,您的问题模棱两可:
如果多个键具有目标值,您期望什么结果?如果键在不同的字典中会有所不同吗?
但是,例如,如果您想要一个 2 元组列表(i, k)
——i
找到值的字典的索引(在列表中)在哪里,并且k
是与该值关联的键——以下工作:
def index_keys(data, value):
return [(i, k) for i, d in enumerate(data) for k, v in d.items() if v == value]
例子:
>>> list1 = [
... {'a':1,'b':2,'c':3},
... {'d':4,'e':5,'f':6},
... {'g':7,'h':8,'i':9}
... ]
>>> index_keys(list1, 5)
[(1, 'e')]
>>> list1[1]['e'] == 5
True
>>> list2 = [
... {'a': 1, 'b': 2, 'c': 3, 'd': 4},
... {'w': 2, 'x': 4, 'y': 6, 'z': 8},
... {'a': 6, 'b': 6, 'y': 6, 'z': 8}
... ]
>>> index_keys(list2, 2)
[(0, 'b'), (1, 'w')]
>>> index_keys(list2, 8)
[(1, 'z'), (2, 'z')]
>>> index_keys(list2, 6)
[(1, 'y'), (2, 'a'), (2, 'y'), (2, 'b')]
如果这些值在所有字典中都是不同的,那么您可以构建一个反向查找字典:
reverselookup = {}
for d in list1:
reverselookup.update({v: k for k, v in d.items()})
然后,您可以使用它通过索引字典来查找与值对应的键:
>>> reverselookup[5]
'e'
如果值不是不同的,但键是不同的,您可以构建一个对应键的列表。
import collections
reverselookup = collections.defaultdict(list)
for d in list1:
for v, k in d.items():
reverselookup[v].append(k)
for dic in list1:
for key in dic:
if dic[key] == search_value:
print key