【问题标题】:sorting list of list containing datetime.date in increasing/decreasing order to create pretty table/csv file按递增/递减顺序对包含 datetime.date 的列表进行排序以创建漂亮的表/csv 文件
【发布时间】:2017-03-27 12:45:05
【问题描述】:

我有一个包含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 文件

问题:

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

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

【问题讨论】:

  • list.sort(key=...)list = sorted(list, key=...)

标签: python sorting csv prettytable


【解决方案1】:

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

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

sorted_table = [table_of_list[0]]
sorted_table.extend(sorted(table_of_list[1:], key=lambda row: row[-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)
    

    【讨论】:

      猜你喜欢
      • 2021-10-31
      • 2022-11-27
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 2018-05-21
      • 2011-05-04
      • 1970-01-01
      • 2022-06-27
      相关资源
      最近更新 更多