如何遍历字典列表并按key分组生成指定格式数据?
嘿,我来帮你解决这个分组转换的问题!你需要把按name分散的字典条目,聚合成每个name对应一组日期和价格的结构,其实只要先分组再转换格式就可以了,下面给你两种可行的方法:
方法一:用普通字典手动分组
先创建一个临时字典来按name收集数据,之后再转换成你需要的格式:
my_list = [ {'name': 'AAA', 'date': '2018-05-14', 'price': 20.0}, {'name': 'AAA', 'date': '2018-05-15', 'price': 22.0}, {'name': 'AAA', 'date': '2018-05-16', 'price': 30.0}, {'name': 'BBB', 'date': '2018-05-14', 'price': 15.0}, {'name': 'BBB', 'date': '2018-05-15', 'price': 32.0} ] # 临时字典,键是name,值是对应的[date, price]列表 grouped = {} for item in my_list: name = item['name'] # 如果当前name还没在字典里,先初始化空列表 if name not in grouped: grouped[name] = [] # 将date和price组成子列表添加进去 grouped[name].append([item['date'], item['price']]) # 转换成目标格式的列表 parsed_list = [{'name': key, 'data': value} for key, value in grouped.items()] print(parsed_list)
方法二:用collections.defaultdict简化代码
如果不想手动判断键是否存在,可以用defaultdict来自动初始化列表,代码会更简洁:
from collections import defaultdict my_list = [ {'name': 'AAA', 'date': '2018-05-14', 'price': 20.0}, {'name': 'AAA', 'date': '2018-05-15', 'price': 22.0}, {'name': 'AAA', 'date': '2018-05-16', 'price': 30.0}, {'name': 'BBB', 'date': '2018-05-14', 'price': 15.0}, {'name': 'BBB', 'date': '2018-05-15', 'price': 32.0} ] # defaultdict会自动为不存在的键创建空列表 grouped = defaultdict(list) for item in my_list: grouped[item['name']].append([item['date'], item['price']]) # 转换为目标格式 parsed_list = [{'name': k, 'data': v} for k, v in grouped.items()] print(parsed_list)
这两种方法运行后都会得到你想要的parsed_list结果。核心思路就是先把相同name的条目聚合起来,再把聚合后的结构转换成你需要的字典格式。
内容的提问来源于stack exchange,提问作者Vlad
相关产品推荐
相关产品推荐

