繁体   English   中英

根据价值找到字典

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM