gpt4 book ai didi

python - 将有序字典列表转换为嵌套列表

转载 作者:行者123 更新时间:2023-12-01 08:48:54 28 4
gpt4 key购买 nike

我有一个有序的字典列表,其中包含一些重复的数据。像这样的东西

[OrderedDict([('caseId', 20), ('userId', 1), ('emailStatus', 21)]), 
OrderedDict([('caseId', 20), ('userId', 1), ('emailStatus', 20)]),
OrderedDict([('caseId', 18), ('userId', 4), ('emailStatus', 21)]),
OrderedDict([('caseId', 19), ('userId', 3), ('emailStatus', 21)]),
OrderedDict([('caseId', 18), ('userId', 1), ('emailStatus', 20)]),
OrderedDict([('caseId', 20), ('userId', 3), ('emailStatus', 21)]),
OrderedDict([('caseId', 18), ('userId', 4), ('emailStatus', 20)]),
OrderedDict([('caseId', 19), ('userId', 1), ('emailStatus', 20)])]

我想得到一个嵌套列表的列表,像这样;

[{
"caseId": "20",
"users": [
{
"userId": "1",
"emailStatus": [
{
"emailStatus" : "20"
},
{
"emailStatus" : "21"
}

]
},
{
"userId": "3",
"emailStatus": [
{
"emailStatus" : "21"
}

]

}
]
},
{
"caseId": "19",
"users": [
{
"userId": "1",
"emailStatus": [
{
"emailStatus" : "20"
}
]

},
{
"userId": "3",
"emailStatus": [
{
"emailStatus" : "21"
}

]

}
]
},
{
"caseId": "18",
"users": [
{
"userId": "1",
"emailStatus": [
{
"emailStatus" : "20"
}
]

},
{
"userId": "4",
"emailStatus": [
{
"emailStatus" : "20"
},
{
"emailStatus" : "21"
}

]

}
]
}
]

呈现这样的嵌套列表;

enter image description here

我试图通过迭代两个列表来实现这一点,但不知道如何记录前一个和下一个记录以及相同的数据。这太令人困惑了。如果有人能给我一个开始,我可以如何迭代我的名单,你会很友善的。

许多问候..

更新问题

More detailed question here

最佳答案

首先,您可以使用循环和 dict.setdefault 对嵌套字典中的数据进行分组:

temp = {}
for d in lst:
temp.setdefault(d["caseId"], {}).setdefault(d["userId"], []).append(d["emailStatus"])
print(temp)
# {18: {1: [20], 4: [21, 20]}, 19: {1: [20], 3: [21]}, 20: {1: [21, 20], 3: [21]}}

或者使用 collections.defaultdict:

temp = defaultdict(lambda: defaultdict(list))
for d in lst:
temp[d["caseId"]][d["userId"]].append(d["emailStatus"])

然后,使用嵌套的混合字典和列表推导来聚合您的最终结果:

res = [{"caseId": case, "users": [{"userId": user, "emailStatus": [{"emailStatus": s} for s in status]} 
for user, status in users.items()]}
for case, users in temp.items()]
print(res)
# [{'caseId': 18, 'users': [{'userId': 1, 'emailStatus': [{'emailStatus': 20}]}, {'userId': 4, 'emailStatus': [{'emailStatus': 21}, {'emailStatus': 20}]}]},
# {'caseId': 19, 'users': [{'userId': 1, 'emailStatus': [{'emailStatus': 20}]}, {'userId': 3, 'emailStatus': [{'emailStatus': 21}]}]},
# {'caseId': 20, 'users': [{'userId': 1, 'emailStatus': [{'emailStatus': 21}, {'emailStatus': 20}]}, {'userId': 3, 'emailStatus': [{'emailStatus': 21}]}]}]

关于python - 将有序字典列表转换为嵌套列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48166852/

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