在 Python 字典链中查找键?

Look up a key in a chain of Python dicts?

Python 中是否有内置的方法来查找 dict d 中的键 k,如果键不存在,请查看它在另一个 dict e?

这可以扩展到任意长的 dicts 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都加到一个列表里,然后用一个方法来查看。