如何按对象对对象列表进行排序';python中的s属性
我有一个对象列表:如何按对象对对象列表进行排序';python中的s属性,python,django,Python,Django,我有一个对象列表: [ [obj1, obj2, obj3], [obj4, obj5, obj6], ... ] 对象是具有日期的实例(从django的queryset返回)。现在,我想根据每个对象列表的最新日期对outter列表进行排序(因为每个列表可以有一个或多个对象,所以我想获得最新的日期作为整个集合的表示形式)。假设对象的类型为dict,并且具有一个名为date的可比较键: 输入生成的完整示例: from datetime import datetime from operator
[
[obj1, obj2, obj3],
[obj4, obj5, obj6], ...
]
对象是具有日期的实例(从django的queryset返回)。现在,我想根据每个对象列表的最新日期对outter列表进行排序(因为每个列表可以有一个或多个对象,所以我想获得最新的日期作为整个集合的表示形式)。假设对象的类型为
dict
,并且具有一个名为date的可比较键:
输入生成的完整示例:
from datetime import datetime
from operator import itemgetter
N = 3
M = 4
l = []
for i in range(N):
l.append([])
for j in range(M):
l[-1].append({'date': datetime.now()})
sorted_list = sorted(l, key=lambda items: max(map(itemgetter('date'), items)))
如果我们设置M=N=2
,这将导致:
[
[{'date': datetime.datetime(2017, 2, 28, 13, 14, 15, 172018)},
{'date': datetime.datetime(2017, 2, 28, 13, 14, 15, 172052)}],
[{'date': datetime.datetime(2017, 2, 28, 13, 14, 15, 172062)},
{'date': datetime.datetime(2017, 2, 28, 13, 14, 15, 172068)}]
]
课堂元
使用安替比妥
比如说
class News(models.Model):
news_titles = models.CharField(max_length=200, unique=True)
news_preview = models.CharField(max_length=200, , unique=True)
news_icon = FileBrowseField(u'News icon', max_length=200, directory="IconImages/",
extensions=[".jpg", ".jpeg", ".png", ".gif"],
blank=True,null=True)
enabled = models.BooleanField(default=1)
news_pub_time = models.DateTimeField(_("Published from"),
help_text=_("With Published chosen, won't be shown until this time"),
blank=True, null=True, db_index=True)
news_full_text = models.TextField(max_length=10000,verbose_name=u'Full text')
def __unicode__(self):
return self.news_titles
class Meta:
ordering = ["-news_pub_time"]
verbose_name = u'News'
假设每个对象都有一个
date
属性,该属性的类型为datetime.date
def sort_by_date(object_lists):
def max_date(objects):
return max(objects, key=lambda obj : obj.date ).date
return sorted(object_lists, key=max_date, reverse=True)
def sort_by_date(object_lists):
def max_date(objects):
return max(objects, key=lambda obj : obj.date ).date
return sorted(object_lists, key=max_date, reverse=True)