0
我有類型的字典字典:查找基於價值
d = {
"key1" : {"id" : 5},
"key2" : {"id" : 6},
}
什麼是發現了一些(並不重要)本字典,它的價值有一個鍵的最Python的方式特定的鍵/值對?在我的例子,我想是這樣的:
result = find_by_key(d, "id", 5) # should return "key1"
我有類型的字典字典:查找基於價值
d = {
"key1" : {"id" : 5},
"key2" : {"id" : 6},
}
什麼是發現了一些(並不重要)本字典,它的價值有一個鍵的最Python的方式特定的鍵/值對?在我的例子,我想是這樣的:
result = find_by_key(d, "id", 5) # should return "key1"
使用生成器表達式和next()
function:
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
如果沒有匹配字典中找到。
生成器表達式根據對dictionary items 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
取決於你的 「第一重點」 的定義。考慮到不排除你的「第一把鑰匙」可能每次都會有所不同。 – 2014-08-27 14:32:41
在這裏定義'第一';字典沒有排序。 – 2014-08-27 14:32:44
你是對的,解決這個問題。 – Tzach 2014-08-27 14:33:16