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

Tra*_*ang 3 dictionary python-3.x

我有好几本这样的字典

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}
Run Code Online (Sandbox Code Playgroud)

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

dicts = dict1, dict2, dict3
Run Code Online (Sandbox Code Playgroud)

它返回这样的结果

({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})
Run Code Online (Sandbox Code Playgroud)

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

dicts = {}
dicts = dicts, dict1
dicts = dicts, dict2
dicts = dicts, dict3
Run Code Online (Sandbox Code Playgroud)

但它返回这样的结果

((({}, {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})
Run Code Online (Sandbox Code Playgroud)

我们怎样才能删除第一个东西?我在 Windows 7 上使用 python 3。所有字典都在 avro 包下的“MyDataFileReader”类型中。

Way*_*ner 9

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

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)
Run Code Online (Sandbox Code Playgroud)


Cod*_*bda 6

正如@MMF 在他的评论中已经指出的那样:a, b, c创建一个包含a,bc(按该顺序)的元组。

你想要做的是“更新”字典:

dict = {}
dict.update(dict1)
dict.update(dict2)
dict.update(dict3)
Run Code Online (Sandbox Code Playgroud)

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

dict = {}
dict.update(dict3)
dict.update(dict2)
dict.update(dict1)
Run Code Online (Sandbox Code Playgroud)

或者

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)
Run Code Online (Sandbox Code Playgroud)

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

dict = dict1, dict2
dict += dict3,
Run Code Online (Sandbox Code Playgroud)