将词典列表转换为词典的词典

时间:2014-06-05 14:28:59

标签: python

转换此词典列表的最简单方法是什么:

[
  {'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'}],
   ...
}

我想要一个很好的解决方案,如列表理解,而不是艰难的方式。 感谢

1 个答案:

答案 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'))}