python数据格式处理问题

nebuung 2021-03-02 04:56:54

show_data = (('2019', '01', '1,601.0'), ('2019', '02', '1,397.0'), ('2019', '03', '2,219.0'), ('2019', '04', '3,229.5'),
('2020', '01', '7,060.0'), ('2020', '02', '3,500.5'), ('2020', '03', '5,031.0'), ('2020', '04', '3,623.0'))

求大神指导怎么变成下面的格式

show_data_list = [
{'year': '2019',
'sales': [{'month': '01', 'amount': '1,601.0'}, {'month': '02', 'amount': '1,397.0'},
{'month': '03', 'amount': '2,219.0'}, {'month': '04', 'amount': '3,229.5'}]
},
{'year': '2020',
'sales': [{'month': '01', 'amount': '7,060.0'}, {'month': '02', 'amount': '3,500.5'},
{'month': '03', 'amount': '5,031.0'}, {'month': '04', 'amount': '3,623.0'}]
}
]

...全文
131 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
nebuung 2021-03-04
  • 打赏
  • 举报
回复
加分结帖·
chuifengde 2021-03-03
  • 打赏
  • 举报
回复
import more_itertools as mi

show_data = (('2019', '01', '1,601.0'), ('2019', '02', '1,397.0'), ('2019', '03', '2,219.0'), ('2019', '04', '3,229.5'),
             ('2020', '01', '7,060.0'), ('2020', '02', '3,500.5'), ('2020', '03', '5,031.0'), ('2020', '04', '3,623.0'))

keyfun = lambda x: x[0]
valfun = lambda x: (x[1], x[2])

re = mi.groupby_transform(show_data, keyfun, valfun)
result = [{'year': i,'sales': [{'month': k[0],'amount': k[1],} for k in j]} for i, j in re]

print(result)
nebuung 2021-03-03
  • 打赏
  • 举报
回复
引用 1 楼 陈年椰子 的回复:
简单的方法就是遍历



show_data = (('2019', '01', '1,601.0'), ('2019', '02', '1,397.0'), ('2019', '03', '2,219.0'), ('2019', '04', '3,229.5'),
('2020', '01', '7,060.0'), ('2020', '02', '3,500.5'), ('2020', '03', '5,031.0'), ('2020', '04', '3,623.0'))


show_data_list = []
show_data_dict = {}
for data in show_data:
if data[0] in show_data_dict:
data_temp = show_data_dict[data[0]]
data_temp[data[1]] = data[2]
else:
show_data_dict[data[0]] = {data[1]:data[2]}


for data in show_data_dict:
data_list_temp = []
for data1 in show_data_dict[data]:
data_list_temp.append({'month': data1, 'amount': show_data_dict[data][data1]})
show_data_list.append({'year': data,'sales': data_list_temp})


for data in show_data_list:
print(data)




谢谢,又学习了一招
DuskCrow_ 2021-03-03
  • 打赏
  • 举报
回复
来个笨办法: show_data = (('2019', '01', '1,601.0'), ('2019', '02', '1,397.0'), ('2019', '03', '2,219.0'), ('2019', '04', '3,229.5'), ('2020', '01', '7,060.0'), ('2020', '02', '3,500.5'), ('2020', '03', '5,031.0'), ('2020', '04', '3,623.0')) show_list = [] for y in set([y[0] for y in show_data]): show_dict = dict.fromkeys(('year','salse')) show_dict['year'] = y data_year = [year_data for year_data in show_data if year_data[0] == y] show_dict['salse'] = [{'month':data[1],'amount':data[2]} for data in data_year] show_list.append(show_dict) print(show_list)
陈年椰子 2021-03-02
  • 打赏
  • 举报
回复
简单的方法就是遍历


show_data = (('2019', '01', '1,601.0'), ('2019', '02', '1,397.0'), ('2019', '03', '2,219.0'), ('2019', '04', '3,229.5'),
             ('2020', '01', '7,060.0'), ('2020', '02', '3,500.5'), ('2020', '03', '5,031.0'), ('2020', '04', '3,623.0'))


show_data_list = []
show_data_dict = {}
for data in show_data:
    if data[0] in show_data_dict:
        data_temp = show_data_dict[data[0]]
        data_temp[data[1]] = data[2]
    else:
        show_data_dict[data[0]] = {data[1]:data[2]}


for data in show_data_dict:
    data_list_temp = []
    for data1 in show_data_dict[data]:
        data_list_temp.append({'month': data1, 'amount': show_data_dict[data][data1]})
    show_data_list.append({'year': data,'sales': data_list_temp})


for data in show_data_list:
    print(data)


37,721

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧