Python如何从多层嵌套列表创建指定结构字典并排序
实现方案
实现逻辑非常直接,分两步完成即可:
- 遍历原始三层嵌套列表,以每条记录里的类别作为字典键,把
(id, 数值)格式的元组追加到对应键的列表中完成数据归集 - 归集完成后,对每个键对应的列表按数值字段做降序排序,就能得到目标结构的字典
代码实现
可读性最高的写法,用defaultdict省去手动判断键是否存在的逻辑:
from collections import defaultdict my_list = [[['id_1', 'A', 10], ['id_1', 'C', 3], ['id_1', 'B', 2]], [['id_2', 'E', 4], ['id_2', 'A', 3], ['id_2', 'D', 1]], [['id_3', 'B', 3], ['id_3', 'C', 1]], [['id_4', 'E', 10], ['id_4', 'A', 5], ['id_4', 'B', 4], ['id_4', 'F', 2]]] result = defaultdict(list) # 遍历嵌套列表归集数据 for sub_list in my_list: for record in sub_list: record_id, category, value = record result[category].append((record_id, value)) # 按数值降序排序每个分类下的列表 for category in result: result[category].sort(key=lambda x: x[1], reverse=True) # 转为普通字典即可 dictionary = dict(result)
如果不想引入collections模块,用原生字典也能实现,只需要多一步键存在性判断:
result = {} for sub_list in my_list: for record in sub_list: record_id, category, value = record if category not in result: result[category] = [] result[category].append((record_id, value)) for category in result: result[category].sort(key=lambda x: x[1], reverse=True) dictionary = result
运行上述代码得到的dictionary和你给出的目标结构、排序结果完全一致。
内容的提问来源于stack exchange,提问作者Kate
相关产品推荐
相关产品推荐

