我想合并两个字典,以便生成的字典具有来自第一个字典的键和来自第一个和第二个字典的值。
>>> A = {'AB': 'a', 'A': 'a'}
>>> B = {'AB': 'b', 'B': 'b'}
>>> merge_left(A, B)
{'AB': 'b', 'A': 'a'}
这有点类似于合并数据库表时使用的左外连接,其中一侧用作“基础”,另一侧与之进行比较。
这是一个表格,列出了每个键在结果字典中应具有的值。
可能的情况 | 输入A | 键不在A中 |
---|---|---|
输入B | 使用 B 的值 | 不包括 |
键不在 B 中 | 使用A的值 | 不适用 |
是否有函数 merge_left
或类似的函数返回上面的 dict?
答案 0 :(得分:2)
我使用 dict.get
's ability to return a default value 制作了一个相当短的 merge_left
函数。这对第一个 dict 的 key, value
对使用 dict-comprehension 并根据第二个进行检查。
def merge_left(defaults, override):
return {key, override.get(key, default) for key, default in defaults.items()}
由于这个函数只是返回一个字典理解,你可以将它直接“内联”到你的代码中。
>>> A = {'AB': 'a', 'A': 'a'}
>>> B = {'AB': 'b', 'B': 'b'}
>>> {k: B.get(k, a) for k, a in A.items()}
{'AB': 'b', 'A': 'a'}