【发布时间】:2021-05-02 14:13:33
【问题描述】:
在 Python3 中是否有一种简单的方法可以通过键对 dict 列表进行分组 我有一个复杂的输入列表要格式化
我的输入对象是这样的:
my_input = [
{
'name': 'nameA',
'departments': [
{
'name': 'dep1',
'details': [
{
'name': 'name_detA',
'tech_name': 'techNameA',
'others': None,
'sub_details': []
},
{
'name': 'name_detB',
'tech_name': 'techNameB',
'others': 22,
'sub_details': [
{
'id': 'idB',
'column2': 'ZZ',
'column3': 'CCC',
'column4': {
'id': 'id2',
'subColumn1': 'HHH',
'subColumn1': 'PPPP',
'subColumn1': 'FFFFFF'
}
}
]
},
{
'name': 'name_detB',
'tech_name': 'techNameB',
'others': 22,
'sub_details': [
{
'id': 'idA',
'column2': 'AA',
'column3': 'BBB',
'column4': {
'id': 'id1',
'subColumn1': 'XXXX',
'subColumn1': 'YYYYY',
'subColumn1': 'DDDDDD'
}
}
]
}
]
}
]
}
]
我的目标是将具有相同details['techName'] 的元素组合成一个元素并合并它们的sub_details
预期输出:
my_output = [
{
"name": "nameA",
"departments": [
{
"name": "dep1",
"details": [
{
"name": "name_detA",
"tech_name": "techNameA",
"others": None,
"sub_details": []
},
{
"name": "name_detB",
"tech_name": "techNameB",
"others": 22,
"sub_details": [
{
"id": "idB",
"column2": "ZZ",
"column3": "CCC",
"column4": {
"id": "id2",
"subColumn1": "HHH",
"subColumn1": "PPPP",
"subColumn1": "FFFFFF"
}
},
{
"id": "idA",
"column2": "AA",
"column3": "BBB",
"column4": {
"id": "id1",
"subColumn1": "XXXX",
"subColumn1": "YYYYY",
"subColumn1": "DDDDDD"
}
}
]
}
]
}
]
}
]
我试过了:
result_list = []
sub = []
for elem in my_input:
for data in elem["departments"]:
for sub_detail, dicts_for_that_sub in itertools.groupby(data["details"], key=operator.itemgetter("sub_details")):
sub.append({"sub_details": sub_detail})
print(sub)
但我正在努力创建新的输出
【问题讨论】:
-
在
sub_details、column4的示例数据中,关键始终是subColumn1,这是您想要的吗?
标签: python python-3.x list group-by