python list 转成 json 格式怎么高效?

2016-11-14 21:04:44 +08:00
 coolair
list 列表如下:
a=[
{'group_id': 1, 'group_name': 'group_1','item_id': 1, 'item_name': 'test_1'},
{'group_id': 1, 'group_name': 'group_1','item_id': 2, 'item_name': 'test_2'},
{'group_id': 1, 'group_name': 'group_1','item_id': 3, 'item_name': 'test_3'},
{'group_id': 2, 'group_name': 'group_2','item_id': 4, 'item_name': 'test_4'},
{'group_id': 2, 'group_name': 'group_2','item_id': 5, 'item_name': 'test_5'},
{'group_id': 2, 'group_name': 'group_2','item_id': 6, 'item_name': 'test_6'},
]

需要转化成的 json 格式如下:
[
{
'group_id': 1,
'group_name': 'group_1'
'items': [{'item_id': 1, 'item_name': 'test_1'}, {'item_id': 2, 'item_name': 'test_2'}]
},
{
'group_id': 2,
'group_name': 'group_2'
'items': [{'item_id': 4, 'item_name': 'test_4'}, {'item_id': 5, 'item_name': 'test_5'}]
},
]

先讲下我的实现方法:
我是先用 group_id 作 key 生成一个字典,再遍历一遍这个字典,然后再排序一下,我觉得我这种做法不对啊,有没有更高效的方法?
5777 次点击
所在节点    问与答
9 条回复
binux
2016-11-14 21:10:39 +08:00
a 有序吗?
coolair
2016-11-14 21:14:37 +08:00
@binux a 有序的,先按 group_id 排,再按 item_id 排,我那样弄,就循环遍历了几遍。
binux
2016-11-14 21:16:35 +08:00
@coolair 用 OrderedDict ,不用再排序
coolair
2016-11-14 21:32:42 +08:00
@binux OrderedDict 不是试用在这种情况下吧,用他还得遍历 3 遍?
binux
2016-11-14 21:37:00 +08:00
@coolair 你的 a 不是有序的吗,插入 OrderedDict 之后,取出来依旧有序,就不用重新排序了。
(其实更好的办法是 current_group_id 做状态转移)
coolair
2016-11-14 21:46:44 +08:00
@binux 不是很明白啊,我现在这个 list 本来就是有序的,插入 OrderedDict 就变成:
{group_id: [course_id, ], } 这样不就丢了元素了么?
binux
2016-11-14 21:55:19 +08:00
@coolair course_id 是什么东西?你「用 group_id 作 key 生成一个字典,再遍历一遍这个字典,然后再排序一下」不丢元素,「用 group_id 作 key 生成一个 OrderedDict ,再遍历一遍这个字典」为什么会丢元素?
dant
2016-11-14 21:56:08 +08:00
itertools.groupby()
coolair
2016-11-14 22:12:56 +08:00
@binux 写错了,应该是 item ,你这种方法我回去再试试,谢谢!
@dant 谢谢,用这个方法写好了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/320496

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX