繁体   English   中英

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

[英]Merge 3 dictionary to one in 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
]

这是使用列表理解的一种方法:

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

output 是:

[{'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 的项目。

这是 pandas 的做法,使用DataFrame.merge

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}]

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

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)

Output:

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

合并3个字典

d = [] # merged dictionary
for (dict1, dict2, dict3) in zip(d1, d2, d3):
    k = 'id' # matching key
    if (dict1[k] == dict2[k] == dict3[k]):
        del dict2[k], dict3[k] # deleting common element from 2nd and 3rd
        dict1.update(dict2)    # merge 2nd in 1st
        dict1.update(dict3)    # merge 3rd in 1st
        d.append(dict(dict1))  # adding in array
print (d)

output:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM