2015-08-21 30 views
1

我有一个python词典,它将许多单词映射到其他单词列表。例如:如何在一个字典中找到其匹配值(它是一个列表)包含X的键?

d = {"Hello": ["hi", "hello", "hey", "yo"], 
    "Goodbye": ["bye", "see ya", "goodbye", "laters"]} 

给定一个小写字,我想检查该字是否在任何字典值中并检索相应的密钥。

我敢肯定有使用一些的蟒蛇功能能力(itertools也许是),但它只是我够不着一些优雅的解决方案......

任何想法?

回答

4

你可以有多个匹配,所以你需要产生一组(因为顺序并不重要,关键是唯一的):

{key for key, words in d.iteritems() if search_word in words} 

如果你只在第一感兴趣比赛(因为你把你的话独特的,说了),你可以使用next()和发电机的表达:

next((key for key, words in d.iteritems() if search_word in words), None) 

你可能想,如果你需要测试多个单词创建一个倒排索引:

reverse_index = {} 
for key, words in d.iteritems(): 
    for word in words: 
     reverse_index.setdefault(word, set()).add(key) 

之后,你可以使用:

reverse_index.get(search_word, set()) 

得到相同的结果。

为唯一词在你的清单,反向索引,简直是:

reverse_index = {word: key for key, words in d.iteritems() for word in words} 
reverse_index.get(search_word) 
+0

没有多重键,其对应的两个列表是唯一的可能性?即一个词只能在其中一个列表中,因此只有一个匹配键。但是,除此之外,您的解决方案非常好! – jramm

相关问题