Python中的反向字典查找
有没有简单的方法可以通过知道字典中的值来找到对应的键呢?
我能想到的就是这个:
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
错误,所以你可能需要捕获这个错误,并返回一个更合适的异常,比如 ValueError
或 KeyError
。
-12
没有这样的东西。别忘了,值可能出现在任何数量的键上,包括0个或者多个。