[英]Find in dict of dicts based on value
我有一个命令:
d = {
"key1" : {"id" : 5},
"key2" : {"id" : 6},
}
在此字典中找到某个值(具有特定键/值对)的(无关紧要的)键的最Python方式是什么? 在我的示例中,我想要类似的东西:
result = find_by_key(d, "id", 5) # should return "key1"
使用生成器表达式和next()
函数 :
def find_by_key(d, key, value):
try:
return next(k for k, v in d.iteritems() if (key, value) in v.viewitems())
except StopIteration:
raise KeyError
如果没有找到匹配的字典,我假设您想要一个KeyError
。
生成器表达式对具有键值对的值过滤字典,这是由针对字典项view的成员资格测试确定的。
这将花费最少的工作来查找匹配的键。
变化:
在Python 3中, dict.items()
已经是一个视图,并且iteritems()
已被抛弃,因此请使用dict.items()
代替:
return next(k for k, v in d.items() if (key, value) in v.items())
如果要返回默认值而不是引发键错误,则可以让next()
返回它:
def find_by_key(d, key, value): return next( (k for k, v in d.iteritems() if (key, value) in v.viewitems()), None)
演示:
>>> def find_by_key(d, key, value):
... try:
... return next(k for k, v in d.iteritems() if (key, value) in v.viewitems())
... except StopIteration:
... raise KeyError
...
>>> d = {
... "key1" : {"id" : 5},
... "key2" : {"id" : 6},
... }
>>> find_by_key(d, "id", 5)
'key1'
>>> find_by_key(d, "id", 6)
'key2'
>>> find_by_key(d, "id", 7)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in find_by_key
KeyError
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.