在 Python 字典链中查找键?
Look up a key in a chain of Python dicts?
Python 中是否有内置的方法来查找 dict
d
中的键 k
,如果键不存在,请查看它在另一个 dict
e
?
这可以扩展到任意长的 dict
s d
=> e
=> f
=> ...?
您可以使用 collections.ChainMap
:
from collections import ChainMap
d = ChainMap({'a': 1, 'b': 2}, {'b': 22}, {'c': 3})
print(d['c'])
print(d['b'])
这将输出:
3
2
请注意,映射中的第一个字典满足了对键 'b'
的查找,其余字典未被搜索到。
ChainMap
是在 Python 3.3
中引入的
可能如下所示:
if k in d:
pass
elif k in e:
pass
elif k in f:
...
如果您使用的是 Python < 3.3,则 ChainMap
不可用。
这不太优雅,但有效:
a = {1: 1, 2: 2}
b = {3: 3, 4: 4}
list_dicts = [a, b]
def lookup(key):
for i in list_dicts:
if key in i:
return i[key]
raise KeyError
lookup(1) # --> 1
lookup(4) # --> 4
你把所有的dict都加到一个列表里,然后用一个方法来查看。
Python 中是否有内置的方法来查找 dict
d
中的键 k
,如果键不存在,请查看它在另一个 dict
e
?
这可以扩展到任意长的 dict
s d
=> e
=> f
=> ...?
您可以使用 collections.ChainMap
:
from collections import ChainMap
d = ChainMap({'a': 1, 'b': 2}, {'b': 22}, {'c': 3})
print(d['c'])
print(d['b'])
这将输出:
3 2
请注意,映射中的第一个字典满足了对键 'b'
的查找,其余字典未被搜索到。
ChainMap
是在 Python 3.3
可能如下所示:
if k in d:
pass
elif k in e:
pass
elif k in f:
...
如果您使用的是 Python < 3.3,则 ChainMap
不可用。
这不太优雅,但有效:
a = {1: 1, 2: 2}
b = {3: 3, 4: 4}
list_dicts = [a, b]
def lookup(key):
for i in list_dicts:
if key in i:
return i[key]
raise KeyError
lookup(1) # --> 1
lookup(4) # --> 4
你把所有的dict都加到一个列表里,然后用一个方法来查看。