为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

泛舟湖上清波郎朗 2021-03-31 09:11:51
如何根据第一个项目对列表中的项目进行分组?例如: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}]
查看完整描述

2 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

使用 itertools.groupby


演示:


from itertools import groupby

l= [{'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}]


查看完整回答
反对 回复 2021-04-13
?
森栏

TA贡献1810条经验 获得超5个赞

这是我的建议,简短,易读且优雅的恕我直言:


from collections import defaultdict


myList= [{'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}]


查看完整回答
反对 回复 2021-04-13
  • 2 回答
  • 0 关注
  • 139 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信