Python:如何合并n个dict的1个列表

2024-09-26 22:54:20 发布

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

我有这个清单:

我想把这些词典按部门分类

departments = [
{
    "department": 4,
    "user": 1,
    "status": False
},
{
    "department": 2,
    "user": 1,
    "status": True
},
{
    "department": 2,
    "user": 2,
    "status": True
}]

我想要这个:

departments = [
{
    "department": 4,
    "user": 1,
    "status": False
},
{
    "department": 2,
    "user": [1, 2]
    "status": True
}]

怎么做


Tags: falsetruestatus分类词典部门departmentdepartments
1条回答
网友
1楼 · 发布于 2024-09-26 22:54:20

你可以试试这个:

import collections
new_data = [(a, list(b)) for a, b in itertools.groupby(departments, key=lambda x:x["department"])]
final_data = [{"department":a, 'status':list(set([i["status"] for i in b])), 'user':[i["user"] for i in b]} for a, b in new_data]

输出:

[{'department': 4, 'status': [False], 'user': [1]}, {'department': 2, 'status': [True], 'user': [1, 2]}]

该解决方案考虑了每个键的值具有多种可能性的可能性。因此,“status”和“user”的每个值都在一个列表中

或者,为了完全匹配OP的期望输出:

final_data = [{"department":a, 'status':list(set([i["status"] for i in b]))[0] if len(set([i["status"] for i in b])) == 1 else list(set([i["status"] for i in b])), 'user':list(set([i["user"] for i in b]))[0] if len(set([i["user"] for i in b])) == 1 else list(set([i["user"] for i in b]))} for a, b in new_data]

输出:

[{'department': 4, 'status': False, 'user': 1}, {'department': 2, 'status': True, 'user': [1, 2]}]

相关问题 更多 >

    热门问题