【问题标题】:Look up a key in a chain of Python dicts?在 Python 字典链中查找一个键?
【发布时间】:2017-10-09 10:49:20
【问题描述】:

Python 中是否有一种内置方法可以在 dict d 中查找键 k,如果该键不存在,则在另一个 dict e 中查找它?

这可以扩展到任意长的dicts d => e => f => ...?

【问题讨论】:

  • 是字典之间的线性搜索吗?就像它总是先看 d,然后是 e,然后是 f..
  • @Vinny - 是的,我想按顺序查看字典。

标签: python dictionary key lookup chain


【解决方案1】:

你可以使用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 中引入

【讨论】:

【解决方案2】:

如果您使用 Python 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

你将所有的字典添加到一个列表中,并使用一种方法来查看它们。

【讨论】:

    【解决方案3】:

    可能如下:

    if k in d:
        pass
    elif k in e:
        pass
    elif k in f:
        ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-11
      • 2011-12-01
      • 1970-01-01
      相关资源
      最近更新 更多