2016-11-13 25 views
-1

我有一个包含datetime对象的列表列表。以递增/递减顺序排列包含datetime.date的列表以创建漂亮的表格/ csv文件

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

我填充列出的这份名单中,这样我就可以利用这个做两件事情:使用prettyTable模块

  • 使用

    • 创建一个漂亮的表这个创建.csv文件

    问题:

    我需要按照date_last_contacted顺序在漂亮表格和csv中组织行的显示顺序排序。 漂亮的表格排序不适合我,也许是因为我有一个标题。但不完全确定。 我是新来的python,不知道lambda的工作原理,但我可以如何排序列表清单之前,利用它来创建.csv文件或漂亮的表。

    总之,我怎样才能以最pythonic的方式对table_of_list内的列表进行排序?

  • +0

    'list.sort(键= ...)'或'名单=排序(列表,关键= ...)' – furas

    回答

    2

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

    我们将原始表格的第一行作为标题,然后添加其他排序的行。

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

    谢谢!这工作! – polyglot

    1

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

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

    import datetime 
    
    table_of_list = [['name', 'email', 'address', 'details', 'date_last_contacted'], 
    [u'Jane Doe', u'[email protected]', u'sillybilly', u'dodo', datetime.date(2016,11,1) ], 
    [u'John Doe', u'[email protected]', 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) 
    
    +0

    感谢这个作品呢! :) – polyglot