我有一个如下所示的字典列表,我想将一些字典合并到一个基于某些键/值对的字典中。
[
{'key': 16, 'value': 3, 'user': 3, 'id': 7},
{'key': 17, 'value': 4, 'user': 3, 'id': 7},
{'key': 17, 'value': 5, 'user': 578, 'id': 7},
{'key': 52, 'value': 1, 'user': 3, 'id': 48},
{'key': 46, 'value': 2, 'user': 578, 'id': 48}
]
现在您可以看到 dict 1 & 2
具有相同的 user 和 id 键值。所以可以像
[
{'key': [16,17], 'value': [3,4], 'user': 3, 'id': 7},
{'key': [17], 'value': [5], 'user': 578, 'id': 7},
{'key': [52], 'value': [1], 'user': 3, 'id': 48},
{'key': [46], 'value': [2], 'user': 578, 'id': 48}
]
意味着 user & id
值必须是唯一的。合并的有效方法是什么(如果可能)
最佳答案
以下函数会将字典列表转换为新格式:
def convert(d):
res = {}
for x in d:
key = (x['user'], x['id'])
if key in res:
res[key]['key'].append(x['key'])
res[key]['value'].append(x['value'])
else:
x['key'] = [x['key']]
x['value'] = [x['value']]
res[key] = x
return res.values()
它将改变原始字典,结果中字典的顺序将是随机的。当应用于输入时,它将产生以下结果:
[
{'id': 7, 'value': [5], 'key': [17], 'user': 578},
{'id': 7, 'value': [3, 4], 'key': [16, 17], 'user': 3},
{'id': 48, 'value': [1], 'key': [52], 'user': 3},
{'id': 48, 'value': [2], 'key': [46], 'user': 578}
]
关于python - 根据一些键/值对从字典列表中合并字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36497008/