如何保存 datetime 对象 prettytable 以排序为日期而不是像字符串

How to save datetime object prettytable to sort as date instead of like a string

我有以下漂亮的表格: 导入运算符

from prettytable import PrettyTable


table = PrettyTable(["Name","Month", "Grade"])
table.title="title test" 
table.add_row(["Joe","Jan", 90])
table.add_row(["Sally", "Feb", 100])
table.add_row(["Bill", "Mar", 90])
table.add_row(["Alice", "April", 90])
print(table.get_string( sortby="Month"))

这会产生以下结果:

+-----------------------+
|       title test      |
+-------+-------+-------+
|  Name | Month | Grade |
+-------+-------+-------+
| Alice | April |   90  |
| Sally |  Feb  |  100  |
|  Joe  |  Jan  |   90  |
|  Bill |  Mar  |   90  |
+-------+-------+-------+

我正在尝试按 Month 列排序,但由于它是一个字符串,所以没有像 datetime 一样对待它。你能告诉我如何在 prettytable 中保存日期时间对象以便我可以对其进行排序吗

您可以在 get_string 方法上使用 sort_key 关键字参数,并向其传递一个将月份名称转换为整数的 lambda 函数:

from prettytable import PrettyTable

months = ['Jan', 'Feb', 'Mar', 'Apr', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

table = PrettyTable(["Name","Month", "Grade"])
table.title="title test" 
table.add_row(["Joe","Jan", 90])
table.add_row(["Sally", "Feb", 100])
table.add_row(["Bill", "Mar", 90])
table.add_row(["Alice", "Apr", 90])

print(table.get_string(sortby="Month", sort_key=lambda row: months.index(row[2]))) # where row[2] is the second item of the row (it's 1-based, *not* 0-based)

请注意,传递给 lambda 函数的行有四个项目——您需要使用基于 1 的索引访问其中的列,而不是您可能倾向于认为的基于 0 的索引。