问题

根据this answer的说法,在Python 3.5或更高版本中,可以通过解压缩两个字典xy来合并它们:

z = {**x, **y}

是否可以解压缩各种字典列表?就像是
def merge(*dicts):
    return {***dicts} # this fails, of course. What should I use here?

例如,我希望
list_of_dicts = [{'a': 1, 'b': 2}, {'c': 3}, {'d': 4}]
{***list_of_dicts} == {'a': 1, 'b': 2, 'c': 3, 'd': 4}

请注意,此问题与如何合并词典列表无关,因为上面的链接提供了对此的答案。这里的问题是:是否有可能以及如何解压缩字典列表?

编辑

如评论中所述,该问题与this one非常相似。但是,解压缩字典列表与简单地合并它们是不同的。假设有一个运算符***旨在解压缩字典列表,并给出
def print_values(a, b, c, d):
    print('a =', a)
    print('b =', b)
    print('c =', c)
    print('d =', d)

list_of_dicts = [{'a': 1, 'b': 2}, {'c': 3}, {'d': 4}]

有可能写
print_values(***list_of_dicts)

代替
print_values(**merge(list_of_dicts))

最佳答案

另一种解决方案是使用collections.ChainMap

from collections import ChainMap

dict(ChainMap(*list_of_dicts[::-1]))

Out[88]: {'a': 1, 'b': 2, 'c': 3, 'd': 4}

关于python - 解压缩Python中的字典列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58940431/

10-15 14:43