gpt4 book ai didi

python - 使用对象属性将列表转换为列表列表

转载 作者:太空狗 更新时间:2023-10-30 02:18:16 33 4
gpt4 key购买 nike

我有一个对象列表

objects = [<object 1>, <object 2>, <object 3>, <object 4>, <object 5>, <object 5>]

每个对象都有一个属性日期(object.date)。我想将列表拆分为列表列表,其中每个子列表只有具有相同日期的对象。有什么聪明的方法可以做到这一点吗?我天真的解决方案是

list_of_lists = []
for object in objects:
success = 0
for list in list_of_lists:
if object.date == list[0].date:
list.append(object)
success = 1
break
if not success:
list_of_lists.append([object])

这确实给出了正确的结果,但我只是想知道最佳解决方案。

最佳答案

您可以使用 itertools.groupby():

from itertools import groupby
from operator import attrgetter
my_lists = [list(g) for _, g in groupby(sorted(objects, key=attrgetter('date')), attrgetter('date'))]

请注意,如果您的对象已按日期属性排序,则无需对其进行排序。

根据您的需要,如果您在运行速度方面需要更多性能,您可以使用字典对对象进行分类:

my_dict = {}

for obj in objects:
my_dict.setdefault(obj.date, []).append(obj) # Don't forget to call the `date` if it's callable

请注意,如果您只想要分类形式的列表,您可以获得字典值:

my_lists = my_dict.values()

关于python - 使用对象属性将列表转换为列表列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36404648/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com