在Python中对列表进行分组,但将它们保留在ord中

2024-04-19 17:19:55 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有以下列表:

list1 = [{'position':'child','title':'dave','obj':obj,created:'2013-11-20'},
         {'position':'child','title':'james','obj':obj,created:'2013-11-19'},
         {'position':'child','title':'james','obj':obj,created:'2013-11-18'},
         {'position':'child','title':'ian','obj':obj,created:'2013-11-17'},
         {'position':'child','title':'dave','obj':obj,created:'2013-11-16'},
         {'position':'child','title':'dave','obj':obj,created:'2013-11-15'},
         {'position':'child','title':'dave','obj':obj,created:'2013-11-14'}]

正如你所看到的,它已经按日期顺序排列了(我想保持这种状态)。关于如何使用defaultdict按公共条目分组,关于stackoverflow有很多答案,但是有没有一种方法可以按title分组,同时保持created顺序,如下所示:

list1 = [{'position':'parent','title':'dave root'},
         {'position':'child','title':'dave','obj':obj,created:'2013-11-20'},
         {'position':'parent','title':'james root'},
         {'position':'child','title':'james','obj':obj,created:'2013-11-19'},
         {'position':'child','title':'james','obj':obj,created:'2013-11-18'},
         {'position':'parent','title':'ian root'},
         {'position':'child','title':'ian','obj':obj,created:'2013-11-17'},
         {'position':'parent','title':'dave root'},
         {'position':'child','title':'dave','obj':obj,created:'2013-11-16'},
         {'position':'child','title':'dave','obj':obj,created:'2013-11-15'},
         {'position':'child','title':'dave','obj':obj,created:'2013-11-14'}]

Tags: childobj列表title状态position条目root
1条回答
网友
1楼 · 发布于 2024-04-19 17:19:55

使用^{}

list1 = [{'position':'child','title':'dave','obj':'obj','created':'2013-11-20'},
         {'position':'child','title':'james','obj':'obj','created':'2013-11-19'},
         {'position':'child','title':'james','obj':'obj','created':'2013-11-18'},
         {'position':'child','title':'ian','obj':'obj','created':'2013-11-17'},
         {'position':'child','title':'dave','obj':'obj','created':'2013-11-16'},
         {'position':'child','title':'dave','obj':'obj','created':'2013-11-15'},
         {'position':'child','title':'dave','obj':'obj','created':'2013-11-14'}]

import itertools
import operator

list1 = [
    x
    for key, grp in itertools.groupby(list1, key=operator.itemgetter('title'))
    for x in [{'position': 'parent', 'title': key + ' root'}]+ list(grp)
]
for x in list1:
    print(x)

输出:

{'position': 'parent', 'title': 'dave root'}
{'position': 'child', 'created': '2013-11-20', 'obj': 'obj', 'title': 'dave'}
{'position': 'parent', 'title': 'james root'}
{'position': 'child', 'created': '2013-11-19', 'obj': 'obj', 'title': 'james'}
{'position': 'child', 'created': '2013-11-18', 'obj': 'obj', 'title': 'james'}
{'position': 'parent', 'title': 'ian root'}
{'position': 'child', 'created': '2013-11-17', 'obj': 'obj', 'title': 'ian'}
{'position': 'parent', 'title': 'dave root'}
{'position': 'child', 'created': '2013-11-16', 'obj': 'obj', 'title': 'dave'}
{'position': 'child', 'created': '2013-11-15', 'obj': 'obj', 'title': 'dave'}
{'position': 'child', 'created': '2013-11-14', 'obj': 'obj', 'title': 'dave'}

相关问题 更多 >