将列表中的第一个项目相同的项目分组

如何根据第一个项目对列表中的项目进行分组?例如:

list= [{'main': 0328, 'a':1},{'main': 0328, 'b': 2},{'main': 0486, 'a': 5},{'main': 0486, 'b': 6}]

将转换为:

list [{'main: 0328','a':1, 'b':2}, {'main': 0486, 'a':5, 'b': 6}]

还是更好:

list [{'a':1, 'b':2}, {'a':5, 'b': 6}]


泛舟湖上清波郎朗
浏览 141回答 2
2回答

catspeake

使用 itertools.groupby演示:from itertools import groupbyl= [{'main': 328, 'a':1},{'main': 328, 'b': 2},{'main': 486, 'a': 5},{'main': 486, 'b': 6}]res = []for key, group in groupby(l, lambda x: x["main"]):    d = {}    for i in group:        del i['main']        d.update(i)    res.append(d)print(res)输出:[{'a': 1, 'b': 2}, {'a': 5, 'b': 6}]

森栏

这是我的建议,简短,易读且优雅的恕我直言:from collections import defaultdictmyList= [{'main': 328, 'a':1},{'main': 328, 'b': 2},{'main': 486, 'a': 5},{'main': 486, 'b': 6}]myDict = defaultdict(dict)for d in myList:    myDict[d.pop('main')].update(d)print(myDict)            # {328: {'a': 1, 'b': 2}, 486: {'a': 5, 'b': 6}}print(myDict.values())   # [{'a': 1, 'b': 2}, {'a': 5, 'b': 6}]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python