如何通过其值从字典列表中获取密钥

时间:2017-03-07 05:58:37

标签: python python-2.7 list dictionary reverse-lookup

我有一个字典列表,我试图通过其值来获取字典键:

list1 = [{'a':1,'b':2,'c':3},
         {'d':4,'e':5,'f':6},
         {'g':7,'h':8,'i':9}]

如果值5存在于词典列表中,我试图获取字典键。

3 个答案:

答案 0 :(得分:0)

你的问题含糊不清,如Peter DeGlopper撰写的pointed out

  

如果多个键具有目标值,您期望得到什么结果?如果键位于不同的词典中,它会有所不同吗?

但是,例如,如果你想要一个2元组列表(i, k) - 其中i是找到值的字典的索引(在列表中),{{1} }是与值相关联的键 - 以下作品:

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

答案 1 :(得分:0)

如果值在这里的所有字典上都是不同的,则可以构建反向查找字典:

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)

答案 2 :(得分:-1)

for dic in list1:
    for key in dic:
        if dic[key] == search_value:
            print key