python - 根据一些键/值对从字典列表中合并字典

标签 python dictionary

我有一个如下所示的字典列表,我想将一些字典合并到一个基于某些键/值对的字典中。

 [
    {'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 具有相同的 userid 键值。所以可以像

这样合并这两个字典
 [
    {'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/

相关文章:

python - 使用字符串在数据框中进行迭代

python - 使用叠加模拟球体周围的扬声器-需要提高速度

python - 在 Python 中循环遍历 Protocol Buffers 属性

dictionary - 如何将 POST 正文绑定(bind)到 map ?

dictionary - 如何在 Go 的映射中分配结构字段

python - Pandas:迭代连接存储在数据框字典中的列

python - 将 FastAPI 中的请求记录到项目目录中的特定文件中

python - 如何检查字符串是否与字典列表中存储的值匹配

VBA如何使用字典

python - 如何制作一行生成器表达式来生成这两个不同的列表