Python prettytable按多列排序

时间:2016-05-24 20:40:02

标签: python sorting prettytable

我使用PrettyTable以漂亮的表格格式将数据打印到终端。 通过单列排序打印非常容易。

from prettytable import PrettyTable

table = PrettyTable(["Name", "Grade"])
table.add_row(["Joe", 90])
table.add_row(["Sally", 100])
print table.get_string(sortby="Grade", reversesort=True)

>> Table with Sally on top, because her score is highest.

我的麻烦是我要对两列进行排序。在这个代理案例中,我想按年级打印,然后按字母顺序打印,如果有平局。

table = PrettyTable(["Name", "Grade"])
table.add_row(["Joe", 90])
table.add_row(["Sally", 100])
table.add_row(["Bill", 90])
print table.get_string(sortby=("Grade","Name"), reversesort=True)

>> Doesn't work

文档说sort_key允许我编写一个函数来实现这一目标,但我还没有看到实际的实现工作。

1 个答案:

答案 0 :(得分:7)

您可以将operator.itemgetter()称为sort_key值。请注意,仍然需要sortby才能应用sort_key

import operator
from prettytable import PrettyTable


table = PrettyTable(["Name", "Grade"])
table.add_row(["Joe", 90])
table.add_row(["Sally", 100])
table.add_row(["Bill", 90])
table.add_row(["Alice", 90])
print table.get_string(sort_key=operator.itemgetter(1, 0), sortby="Grade")

打印:

+-------+-------+
|  Name | Grade |
+-------+-------+
| Alice |   90  |
|  Bill |   90  |
|  Joe  |   90  |
| Sally |  100  |
+-------+-------+