在python中按顺序将多个词典附加到一个词典中

append multiple dictionaries into one dictionary sequentially in python

我有几本这样的字典

1
2
3
dict1 = {0: 33.422, 1: 39.2308, 2: 30.132}
dict2 = {0: 42.2422, 1: 43.342, 2: 42.424}
dict3 = {0: 13.422, 1: 9.2308, 2: 20.132}

我知道我可以用代码把它们组合成一本字典。

1
dicts = dict1, dict2, dict3

它返回这样的结果

1
({0: 33.422, 1: 39.2308, 2: 30.132}, {0: 42.2422, 1: 43.342, 2: 42.424}, {0: 13.422, 1: 9.2308, 2: 20.132})

但是,如果字典是按顺序排列的呢?我怎样才能得到相同的结果?我试过以下代码

1
2
3
4
dicts = {}
dicts = dicts, dict1
dicts = dicts, dict2
dicts = dicts, dict3

但它返回这样的结果

1
((({}, {0: 33.422, 1: 39.2308, 2: 30.132}), {0: 42.2422, 1: 43.342, 2: 42.424}), {0: 13.422, 1: 9.2308, 2: 20.132})

我们怎样才能把第一件东西拿走?我正在Windows7上使用python 3。所有的字典都在"mydatafilereader"类型的avro包下。


如果我理解正确,您需要字典列表:

1
2
3
4
5
6
7
dict1 = {0: 33.422, 1: 39.2308, 2: 30.132}
dict2 = {0: 42.2422, 1: 43.342, 2: 42.424}
dict3 = {0: 13.422, 1: 9.2308, 2: 20.132}
dicts = []
dicts.append(dict1)
dicts.append(dict2)
dicts.append(dict3)

正如@mmf在其评论中所述:a, b, c创建了一个包含abc的元组(按顺序)。

你要做的是"更新"字典:

1
2
3
4
dict = {}
dict.update(dict1)
dict.update(dict2)
dict.update(dict3)

或者,如果您不想让dict3dict2覆盖内容:

1
2
3
4
dict = {}
dict.update(dict3)
dict.update(dict2)
dict.update(dict1)

1
2
3
4
5
6
7
def update_without_overwriting(d, x):
    dict.update({k: v for k, v in x.items() if k not in d})

dict = {}
update_without_overwriting(dict, dict1)
update_without_overwriting(dict, dict2)
update_without_overwriting(dict, dict3)

但是,如果您只想要一个包含所有dict的元组,请使用以下命令:

1
2
dict = dict1, dict2
dict += dict3,


从示例的第一部分来看,您似乎是在尝试获取字典的元组,而不是dict的dict。所以试试这个:

1
2
3
4
dicts = ()
dicts = dicts + (dict1,)
dicts = dicts + (dict2,)
dicts = dicts + (dict3,)

注意尾随逗号是必需的…