合并键值相同的字典

时间:2021-05-12 10:29:44

标签: python dictionary

我只发现人们想要将字典与标准“键”合并的问题,但我想根据相同的值合并字典(我不知道确切的值是什么)。

假设我有一个包含字典的列表

myList = [
  {'key1': 'v1', 'key2': 'v2'},
  {'key1': 'v1', 'key2': 'v3'},
  {'key1': 'v1', 'key2': 'v4'},
  {'key1': 'v5', 'key2': 'v6'},
  {'key1': 'v7', 'key2': 'v8'}
]

现在我想合并键值相同的字典,例如,key1 的值是 v1 但我不知道“v1”是什么所以我不能使用=='v1' 之类的条件。

结果

myMergedList = [
  {'key1': 'v1', 'key2': ('v2','v3','v4')},
  {'key1': 'v5', 'key2': 'v6'},
  {'key1': 'v7', 'key2': 'v8'}
]

1 个答案:

答案 0 :(得分:1)

试试:

myList = [
    {"key1": "v1", "key2": "v2"},
    {"key1": "v1", "key2": "v3"},
    {"key1": "v1", "key2": "v4"},
    {"key1": "v5", "key2": "v6"},
    {"key1": "v7", "key2": "v8"},
]

out = {}
for d in myList:
    out.setdefault(d["key1"], []).append(d["key2"])

out = [
    {"key1": k, "key2": v[0] if len(v) == 1 else tuple(v)}
    for k, v in out.items()
]

print(out)

打印:

[{'key1': 'v1', 'key2': ('v2', 'v3', 'v4')}, 
 {'key1': 'v5', 'key2': 'v6'}, 
 {'key1': 'v7', 'key2': 'v8'}]