如何在字典中找到匹配值(列表)包含X的密钥?

时间:2015-08-21 08:59:24

标签: python dictionary

我有一个python字典,它将许多单词映射到其他单词列表。 E.g:

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

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

我确信有一些优雅的解决方案可以使用一些蟒蛇的功能(或许itertools),但它超出了我的范围......

有什么想法吗?

1 个答案:

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