需求:根據列表中字段元素某個(些)字段分組
解決方案: functiontools中groupby函數進行分組,使用這個函數前必須先要排序,可通過使用operator 模塊的itemgetter 函數,可以非常容易的排序這樣的數據結構。
1 data=[ 2 3 {'id': '078af4a6228047dba0' , 'main_code': 'TJ' , 'code': 'XC001' , ‘groupid’: 0 , 'column_name': 'name' , 'column_value': '張三'}, 4 5 {'id': '078af4a6228047dba0' , 'main_code': 'TJ', 'code': 'XC001' , ‘groupid’: 0, 'column_name': 'age' , 'column_value': '27'}, 6 7 {'id':'078af4a6228047dba0', 'main_code': 'TJ','code':'XC001',‘groupid’:1,'column_name':'name','column_value':'李四'}, 8 9 {'id':'078af4a6228047dba0', 'main_code': 'TJ','code':'XC001',‘groupid’:1,'column_name':'age','column_value':'45'}, 10 11 {'id': '078af4a6228047dba0' , 'main_code': 'LP' , 'code': 'XC001' , ‘groupid’: 0 , 'column_name': 'name' , 'column_value': '張三'}, 12 13 {'id': '078af4a6228047dba0' , 'main_code': 'LP', 'code': 'XC001' , ‘groupid’: 0, 'column_name': 'age' , 'column_value': '27'}, 14 15 {'id':'078af4a6228047dba0', 'main_code': 'LP','code':'XC001',‘groupid’:1,'column_name':'name','column_value':'李四'}, 16 17 {'id':'078af4a6228047dba0', 'main_code': 'LP','code':'XC001',‘groupid’:1,'column_name':'age','column_value':'45'}, 18 19 {'id':'078af4a6228047dba0', 'main_code': 'TJ','code':'RY002',‘groupid’:0,'column_name':'sex','column_value':'男'}, 20 21 {'id':'82970de3e3b836d34', 'main_code': 'TJ','code':'BD001',‘groupid’:0,'column_name':'isEnable','column_value':True} 22 23 ] 24 25 from operator import itemgetter 26 from itertools import groupby 27 import json 28 data.sort(key=itemgetter('id')) 29 datas = [] 30 # id分組 31 for id, items in groupby(data, key=itemgetter('id')): 32 data_dict = {'id': id} 33 for code_info, item in groupby(items, key=itemgetter('main_code','code')): 34 if code_info[0]: 35 column=[] 36 list_item=[i for i in item] 37 list_item.sort(key=itemgetter('groupid')) 38 for group_id,g_item in groupby(list_item,key=itemgetter('groupid')): 39 column_dict = {} 40 for gi in g_item: 41 column_dict[gi.get('column_name')] = gi.get('column_value') 42 column_dict['group_id'] = group_id 43 column.append(column_dict) 44 data_dict[f'{code_info[0]}{code_info[1]}'] = column if len(column)>1 else column[0] 45 else: 46 data_dict[f'{code_info[0]}{code_info[1]}'] = '無數據' 47 datas.append(data_dict) 48 print(json.dumps(datas,ensure_ascii=False))

博友有其他方案,不吝賜教...
