Python中的反向字典查找

138 投票
13 回答
153602 浏览
提问于 2025-04-15 21:10

有没有简单的方法可以通过知道字典中的值来找到对应的键呢?

我能想到的就是这个:

key = [key for key, value in dict_obj.items() if value == 'value'][0]

13 个回答

70

有些情况下,字典是一种一对一的映射关系。

比如,

d = {1: "one", 2: "two" ...}

如果你只需要查找一次,这种方法是可以的。不过,如果你需要查找多次,创建一个反向字典会更有效率。

ivd = {v: k for k, v in d.items()}

如果可能会有多个键对应同一个值,你就需要明确在这种情况下想要的行为。

如果你的Python版本是2.6或更早的版本,你可以使用

ivd = dict((v, k) for k, v in d.items())
135

你的列表推导式会遍历字典中的所有项目,寻找所有匹配的项,然后只返回第一个键。而这个生成器表达式只会遍历到找到第一个值为止:

key = next(key for key, value in dd.items() if value == 'value')

这里的 dd 是字典。如果没有找到匹配项,会抛出 StopIteration 错误,所以你可能需要捕获这个错误,并返回一个更合适的异常,比如 ValueErrorKeyError

-12

没有这样的东西。别忘了,值可能出现在任何数量的键上,包括0个或者多个。

撰写回答