我有一个dicts的词典:
d = {
"key1" : {"id" : 5},
"key2" : {"id" : 6},
}
Run Code Online (Sandbox Code Playgroud)
在这个词典中找到一些(无关紧要的)关键是它的值是否具有特定的键/值对,这是什么最pythonic方式?在我的例子中,我想要像:
result = find_by_key(d, "id", 5) # should return "key1"
Run Code Online (Sandbox Code Playgroud)
使用生成器表达式和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
Run Code Online (Sandbox Code Playgroud)
KeyError如果找不到匹配的字典,我假设你想要一个.
生成器表达式对具有键值对的值的字典进行过滤,这由对字典项视图的成员资格测试确定.
这样做可以找到匹配键的最小工作量.
变化:
在Python 3 dict.items()中已经是一个视图,并且iteritems()已被抛弃,因此请dict.items()改为使用:
return next(k for k, v in d.items() if (key, value) in v.items())
Run Code Online (Sandbox Code Playgroud)如果要返回默认值而不是引发键错误,可以将其next()返回:
def find_by_key(d, key, value):
return next(
(k for k, v in d.iteritems() if (key, value) in v.viewitems()),
None)
Run Code Online (Sandbox Code Playgroud)演示:
>>> 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
74 次 |
| 最近记录: |