在python中将3个字典合并为1个字典

2024-04-29 09:00:28 发布

您现在位置:Python中文网/ 问答频道 /正文

将3本字典合并为一本。每个id都有一个元素(id)作为公共元素

d1如下

 [{
    "id": 1,
    "title": "delectus aut autem"
  },
  {
    "id": 2,
    "title": "quis ut nam facilis et officia qui"
  }]

d2

 [{
    "id": 1,
    "Level":"Gold"
  },
  {
    "id": 2,
    "Level":"Silver"
  }]

d3

 [{
    "id": 1,
    "completed": false
  },
  {
    "id": 2,
    "completed": true
  }]

预料之外

[
  {
    "id": 1,
    "title": "delectus aut autem",
    "Level":"Gold",
    "completed": false
  },
  {
    "id": 2,
    "title": "quis ut nam facilis et officia qui",
    "Level":"Silver"
    "completed": true
]

Tags: id元素titleleveletutcompletedaut
3条回答

这里有一种通过列表理解来实现的方法:

[{**a, **b, **c} for a, b, c in zip(d1, d2, d3)]

输出为:

[{'id': 1, 'title': 'delectus aut autem', 'Level': 'Gold', 'completed': False},
 {'id': 2,
  'title': 'quis ut nam facilis et officia qui',
  'Level': 'Silver',
  'completed': True}]

请注意,这假定所有三个列表:

  • 按ID排序。如果不是这样,请首先使用(例如):l3 = sorted(l3, key=lambda x:x["id"])对它们进行排序
  • 包含所有ID的项

这将适用于已排序/未排序的列表

import itertools
from collections import defaultdict

merged_dict = defaultdict(dict)

for d in itertools.chain(d1, d2, d3):
    merged_dict[d["id"]].update(d)
 
final_list = list(merged_dict.values())

print(final_list)

输出:

[
    {
        "id": 1,
        "title": "delectus aut autem",
        "Level": "Gold",
        "completed": False
    },
    {
        "id": 2,
        "title": "quis ut nam facilis et officia qui",
        "Level": "Silver",
        "completed": True,
    }
]

下面是使用^{}的方法

import pandas as pd

print(
    pd.DataFrame(df1).merge(pd.DataFrame(df2), on=['id'])
        .merge(pd.DataFrame(df3), on=['id'])
        .to_dict(orient='records')
)

[{'id': 1, 'title': 'delectus aut autem', 'Level': 'Gold', 'completed': False}, 
 {'id': 2, 'title': 'quis ut nam facilis et officia qui', 'Level': 'Silver', 'completed': False}]

相关问题 更多 >