2017-02-28 69 views
-2

排序我有對象的名單列表:具有日期如何對象名單,名單由一個對象的屬性在Python

[ 
[obj1, obj2, obj3], 
[obj4, obj5, obj6], ... 
] 

對象是一個實例(從Django的查詢集返回)。現在我想根據每個對象列表的最新日期排列列表(因爲每個列表可以有一個或多個對象,我想要獲取最新的日期作爲整個集合的表示)。

回答

1

假設對象是dict類型的並具有相當關鍵的命名日期

sorted_list = sorted(l, key=lambda items: max(map(itemgetter('date'), items))) 

與輸入生成一個完整的例子:

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)}] 
] 
0

類元 使用排序屬性附加傷害 例如

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' 
1

假設每個對象具有屬性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) 
相關問題