我有一个字典的python列表,如下所示:
mylist = [{'id':1,'value':4},{'id':1,'value':6},{'id':2,'value':6},{'id':3,'value':9},{'id':3,'value':56},{'id':3,'value':67},]
我正在尝试通过对上面显示的词典列表进行一些操作来创建这样的新词典列表
newlist = [{'id':1,'value':[4,6]},{'id':2,'value':[6]},{'id':3,'value':[9,56,67]}]
有没有人知道这样做的好方法?
答案 0 :(得分:2)
如果列表项按id
排序,您可以使用itertools.groupby
:
>>> mylist = [{'id':1,'value':4},{'id':1,'value':6},{'id':2,'value':6},{'id':3,'value':9},{'id':3,'value':56},{'id':3,'v alue':67},]
>>> import itertools
>>> [{'id': key, 'value': [x['value'] for x in grp]}
... for key, grp in itertools.groupby(mylist, key=lambda d: d['id'])]
[{'id': 1, 'value': [4, 6]},
{'id': 2, 'value': [6]},
{'id': 3, 'value': [9, 56, 67]}]
答案 1 :(得分:1)
您可以使用defaultdict
构建整个词典列表作为具有多个值的单个词典,就像这样
from collections import defaultdict
d = defaultdict(list)
for item in mylist:
d[item['id']].append(item['value'])
然后使用列表理解,您可以像这样重建所需的词典列表
print[{'id': key, 'value': d[key]} for key in d]
# [{'id':1, 'value':[4, 6]}, {'id':2, 'value':[6]}, {'id':3, 'value':[9,56,67]}]
答案 2 :(得分:0)
你也可以使用字典理解:
newlist = {key: [entries[key] for entries in diclist] for key, value in diclist[0].items()}