当键具有特定值时合并python字典

当键具有特定值时合并python字典,python,dictionary,Python,Dictionary,我有一个python字典列表,如下所示: [{key1: value1, key2: array1}, {key1: value2, key2: array2}, {key1: value3, key3: array3},...] merged = {} for d in list_of_dicts: if d["key1"] not in merged: merged[d["key1"]] = d["key2"] else: merged[d[

我有一个python字典列表,如下所示:

[{key1: value1, key2: array1}, {key1: value2, key2: array2}, {key1: value3, key3: array3},...]
merged = {}
for d in list_of_dicts:
    if d["key1"] not in merged:
        merged[d["key1"]] = d["key2"]
    else:
        merged[d["key1"]] += d["key2"]

# if necessary, put back into a list of dicts:
merged_list = [{"key1": k, "key2": v} for k, v in merged.items()]
在我的例子中,这些字典中的一些对key1具有相同的值,例如value1=value3。我怎样才能得到一系列看起来像这样的词典呢

 [{key1: value1, key2: array1+array3}, {key1: value2, key2: array2},...]
其中“array1+array3”是一个单独的数组,附加了原始array1和array3数组的元素


编辑:这不是按键合并;数组中的每个字典都有严格相同的结构:{key1:“some_string”,key2:[an array]}-我的问题是我希望将它们“合并”到“some_string”上,因此[an array]的值key2将与列表中具有相同“some_string”的其他字典中的数组连接起来作为键1的值。

执行所需操作的最佳方法是重新构造数据,至少是暂时的。如果要使用从
value
映射到
array
(没有固定键)的字典,则可以将所有数据放在一个位置,并在出现重复值时进行有效检测,以便将值合并在一起。如果需要的话,您可以在以后将单个词典重新转换为较小词典的列表

试着这样做:

[{key1: value1, key2: array1}, {key1: value2, key2: array2}, {key1: value3, key3: array3},...]
merged = {}
for d in list_of_dicts:
    if d["key1"] not in merged:
        merged[d["key1"]] = d["key2"]
    else:
        merged[d["key1"]] += d["key2"]

# if necessary, put back into a list of dicts:
merged_list = [{"key1": k, "key2": v} for k, v in merged.items()]

列表末尾的顺序是任意的。如果要保留原始列表中DICT的顺序,可以使用
OrderedDict
进行
merged
因为要按
key1
分组,所以可以使用
itertools.groupby()

输出:

[{'key2': [1, 2, 5, 6], 'key1': 1}, {'key2': [3, 4], 'key1': 2}]
可能重复的