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

标签 python dictionary

我有一个 python 字典,它将一些单词映射到其他单词列表。例如:

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

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

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

有什么想法吗?

最佳答案

您可以匹配多个键,因此您需要生成一组(因为顺序无关紧要并且键是唯一的):

{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)

关于python - 如何在匹配值(列表)包含 X 的字典中找到键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32136339/

相关文章:

python - 找不到满足压缩文件要求的版本(来自版本 : )

Python 进阶之路——从学徒到大师

正则表达式中的 Python 正则表达式否定

python - 有没有更快的方法将大量字典转换为 pandas DataFrame?

dictionary - 在 golang 中使用私有(private) map 、 slice 的最佳做法是什么?

python - 按下按钮时显示/隐藏布局

python - 如果相同则删除多维列表中的元组

javascript - 放大谷歌地图时多边形颜色重叠

c++ - 带有 map 的部分类模板特化

python - 将列表字典写入python中的制表符分隔文件,将字典键值作为没有Pandas的列