gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 14:32:06 25 4
gpt4 key购买 nike

我有这个列表:

我希望能够根据部门对这些词典进行分组

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

如何做到这一点?

最佳答案

你可以试试这个:

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

关于Python:如何合并 1 个 n 个字典的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47208769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com