Python 如何在匹配值(即列表)包含X的dict中找到键?

Python 如何在匹配值(即列表)包含X的dict中找到键?,python,dictionary,Python,Dictionary,我有一本python字典,它将许多单词映射到其他单词的列表中。例如: d = {"Hello": ["hi", "hello", "hey", "yo"], "Goodbye": ["bye", "see ya", "goodbye", "laters"]} 给定一个小写单词,我想检查该单词是否在任何字典值中,并检索相应的键 我确信有一些优雅的解决方案使用了pythons的一些功能(itertools也许),但它只是超出了我的能力范围 有什么想法吗?您可以让多个键匹配,因此需要生成一

我有一本python字典,它将许多单词映射到其他单词的列表中。例如:

d = {"Hello": ["hi", "hello", "hey", "yo"],
     "Goodbye": ["bye", "see ya", "goodbye", "laters"]}
给定一个小写单词,我想检查该单词是否在任何字典值中,并检索相应的键

我确信有一些优雅的解决方案使用了pythons的一些功能(
itertools
也许),但它只是超出了我的能力范围

有什么想法吗?

您可以让多个键匹配,因此需要生成一组(因为顺序不重要,键是唯一的):

如果您只对第一个匹配感兴趣(例如,因为您保持单词的唯一性),则可以使用
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)
您可以有多个匹配的关键点,因此需要生成一个集合(因为顺序不重要,关键点是唯一的):

如果您只对第一个匹配感兴趣(例如,因为您保持单词的唯一性),则可以使用
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)

由于两个列表是唯一的,因此不可能有多个键匹配?也就是说,一个单词只能在一个列表中,因此有一个匹配键。但是,除此之外,你的解决方案是好的!由于两个列表是唯一的,因此不可能有多个键匹配?也就是说,一个单词只能在一个列表中,因此有一个匹配键。但是,除此之外,你的解决方案是好的!