【发布时间】:2013-12-11 17:47:29
【问题描述】:
我知道Merge dictionaries without overwriting values、merging "several" python dictionaries、How to merge multiple dicts with same key? 和How to merge two Python dictionaries in a single expression?。
不过,我的问题略有不同。
假设我有这三个字典
dict_a = {'a': [3.212], 'b': [0.0]}
dict_b = {'a': [923.22, 3.212], 'c': [123.32]}
dict_c = {'b': [0.0]}
合并后的结果应该是
result_dict = {'a': [3.212, 3.212, 923.22], 'b': [0.0, 0.0], 'c': [123.32]}
这里的代码有效,但会在列表中嵌套列表
result_dict = {}
dicts = [dict_a, dict_b, dict_c]
for d in dicts:
for k, v in d.iteritems():
result_dict.setdefault(k, []).append(v)
使用extend 而不是append 会阻止嵌套列表,但如果键不存在则不起作用。所以基本上它应该在没有覆盖的情况下执行update,就像在其他线程中一样。
对不起,这是我这边的一个错误。昨天太晚了,我没有注意到引发错误的那一行不是我认为的那一行,因此假设我的字典已经具有上述结构。
事实上,mgilson 是正确的,假设它与 TypeError 相关。确切地说,是一个“可组合的浮点数”。
【问题讨论】:
-
您能解释一下为什么
extend不起作用吗?setdefault(k, [])不应该处理不存在的关键问题吗? -
为什么
a的结果列表以该顺序结束?我原以为:[ 3.212, 923.22, 3.212] -
@mgilson 是的,对不起。我已经在脑子里整理好了。但应该是你说的那样。
标签: python dictionary merge