如何保存 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 的索引。
我有以下漂亮的表格: 导入运算符
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 的索引。