2014-04-16 48 views
0

我有一个字典,其中的值是列表。我想看看在列表中的特定值(字典的值字段),并返回键值:那么“EF”我会得到“A”,对“百万”我会得到根据值字段python字典找到键值

dict={'a':['ab','cd','ef'], 'b':['gh', 'ij'], 'c':['kl', 'mn']} 

'C' ......

我已经tryied

value_key=[a for a,b in dict if value in b] 

任何想法?

+2

字典只是为了走一条路(从关键值) 。如果你发现自己需要走相反的路,他们不是正确的结构使用 – wnnmaw

+0

你的字典无效。 – thefourtheye

+0

此外,你不能简单地“倒转”你的字典,因为列表不能是键 – wnnmaw

回答

2

假设你想要做索引这样不止一次,你应该建立反向映射,从值(副值真的),以键:

{ vsub:k for k, v in d.iteritems() for vsub in v } 

这需要你原来的字典(称为d这里因为dict是Python中的一个内置名称),并且通过映射每个子值(列表中的元素)进行调整来“倒置”它。

一旦你有了这个新的字典,你可以简单地索引,它通过像“AB”键获得“A”:

{'ab': 'a', 'ef': 'a', 'mn': 'c', 'kl': 'c', 'ij': 'b', 'cd': 'a', 'gh': 'b'} 
+0

(请注意,这要求子值是唯一的,如果它们不是这样,那么您在其他答案中的效率会更差)。 – geoffspear

1

for key in dict_object对字典进行遍历,然后使用in运算符来检查被搜索的值是否在对应于该键的字典值中。如果存在,则保留输出的密钥。

my_dict,val={"a": ["ab", "cd", "ef"], "b": ["gh", "ij"], "c": ["kl", "mn"]}, "ef" 
print [key for key in my_dict if val in my_dict[key]] 
# ['a'] 

这种方法的优点是,它会工作,不论当前流行的Python版本,因为我们不担心itemsiteritems方法。