Python 将字典列表转换为dict of dict

Python 将字典列表转换为dict of dict,python,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'}, ...... ] 为此

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

[
  {'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'}],
   ...
}
我想要一个很好的解决方案,如列表理解,而不是艰难的方式。
谢谢

列表理解需要(低效的)排序操作,然后分组

使用字典和循环要容易得多:

res = {}
for entry in inputlist:
    code = entry.pop('code')
    res.setdefault(code, []).append(entry)
这改变了原有的词典;如果这是一个问题,请先创建副本:

entry = dict(entry)
code = entry.pop('code')
如果您的输入列表已经排序,那么您可以使用一行代码生成字典,但此解决方案的可读性仍有争议:

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

既然你知道列表理解是什么,试着玩一段时间的听写理解,看看这能让你得到什么,我的脑子被吹走了。这怎么可能。你怎么能写这么简单的代码(太棒了!)+1我正在从数据库中检索数据,不需要排序。但这似乎有利于learning@MartijinPieters,另外,如何按键对res进行排序?(即通过代码)@MihaiZamfir:
res
是一本字典;字典没有顺序。@Martijin Pieters我认为有一种方法可以对字典进行排序,而不需要使用键,对它们进行排序,然后使用
res[key]
。。。