Merge dictionaries without overwriting previous value where value is a list
我知道在不覆盖值的情况下合并字典,合并"多个"python字典,如何用相同的键合并多个dict?以及如何在一个表达式中合并两个Python字典?.
不过,我的问题略有不同。
假设我有这三本字典
1 2 3 | dict_a = {'a': [3.212], 'b': [0.0]} dict_b = {'a': [923.22, 3.212], 'c': [123.32]} dict_c = {'b': [0.0]} |
合并结果应为
1 | result_dict = {'a': [3.212, 3.212, 923.22], 'b': [0.0, 0.0], 'c': [123.32]} |
号
这里的代码可以工作,但会在列表中嵌套列表
1 2 3 4 5 6 | 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) |
使用
对不起,这是我的错。昨天太晚了,我没有注意到出错的那一行不是我想象的那样,因此我假设我的字典已经有了上述结构。事实上,假设与
我很肯定,
1 2 3 4 5 6 7 8 9 10 11 12 | >>> 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 = {} >>> dicts = [dict_a, dict_b, dict_c] >>> >>> for d in dicts: ... for k, v in d.iteritems(): ... result_dict.setdefault(k, []).extend(v) ... >>> result_dict {'a': [3.212, 923.22, 3.212], 'c': [123.32], 'b': [0.0, 0.0]} |
魔法就在
请注意,如果项目
在这种情况下,我认为你需要借助于在
1 2 3 4 5 6 | for d in dicts: for k, v in d.iteritems(): try: result_dict.setdefault(k, []).extend(v) except TypeError: result_dict[k].append(v) |
号