转换此词典列表的最简单方法是什么:
[
{'code': 1, name:'A', value:'1'},
{'code': 1, name:'B', value:'2'},
{'code': 2, name:'C', value:'3'},
{'code': 2, name:'D', value:'4'},
{'code': 3, name:'E', value:'5'},
{'code': 3, name:'F', value:'6'},
......
]
进入这个:
{
1: [{name:'A', value:'1'}, {name:'B', value:'2'}],
2: [{name:'C', value:'3'}, {name:'D', value:'4'}],
3: [{name:'E', value:'5'}, {name:'F', value:'6'}],
...
}
我想要一个很好的解决方案,如列表理解,而不是艰难的方式。 感谢
答案 0 :(得分:2)
列表理解需要(低效)排序操作,然后进行分组。
使用字典和循环要容易得多:
res = {}
for entry in inputlist:
code = entry.pop('code')
res.setdefault(code, []).append(entry)
此更改原始词典;如果这是一个问题,请先创建一个副本:
entry = dict(entry)
code = entry.pop('code')
如果您的输入列表已经排序,那么您可以使用itertools.groupby()
以单行方式生成字典,但此解决方案的可读性值得商榷:
from itertools import groupby
from operator import itemgetter
res = {key: [{k: v for k, v in d.items() if k != 'code'} for d in group]
for key, group in groupby(inputlist, itemgetter('code'))}