按递增/递减顺序对包含datetime.date的列表进行排序,以创建漂亮的table / csv文件

时间:2016-11-13 21:59:05

标签: python sorting csv prettytable

我有一个包含datetime对象的列表列表。

table_of_list= [[name, email, address, details, date_last_contacted], 
 [u'Jane Doe', u'jdoe@abc.com', u'sillybilly', u'dodo', datetime.date(2016, 11, 1)]
 [u'John Doe', u'jedoe@abc.com', u'123 house',u'random', dateTime.date(2016,10,1)]
 [].....
]

我正在填充此列表列表,以便我可以利用它来做两件事:

  • 使用prettyTable模块
  • 创建漂亮的表格
  • 使用它来创建.csv文件

问题:

我需要按照漂亮表和date_last_contacted中的csv顺序组织显示行的方式。 漂亮的桌子排序对我不起作用,因为我有一个标题。但不完全确定。 我是python的新手,不知道lambda是如何工作的,但我可以在利用它创建.csv文件或漂亮的表之前对列表列表进行排序。

简而言之,我如何以最pythonic的方式对table_of_list中的列表进行排序?

2 个答案:

答案 0 :(得分:3)

您可以使用sorted函数将key设置为返回最后一个元素的lambda函数 - 按最后一个元素排序。

我们将原始表的第一行作为标题,然后添加其余行,这些行已排序。

sorted_table = [table_of_list[0]]
sorted_table.extend(sorted(table_of_list[1:], key=lambda row: row[-1]))

答案 1 :(得分:2)

您可以使用list = sorted(list, key=...)list.sort(key=...)

第一种方法允许您使用切片来获取/设置列表的一部分 - 而不更改第一行。

import datetime

table_of_list = [['name', 'email', 'address', 'details', 'date_last_contacted'], 
 [u'Jane Doe', u'jdoe@abc.com', u'sillybilly', u'dodo', datetime.date(2016,11,1) ],
 [u'John Doe', u'jedoe@abc.com', u'123 house',u'random', datetime.date(2016,10,1) ]
]

table_of_list[1:] = sorted(table_of_list[1:], key=lambda x: x[4])

print(table_of_list)