Python prettytable按多列排序

cod*_*key 6 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.
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

文档说sort_key将允许我编写一个函数来完成这个,但我还没有看到一个实际的实现来解决.

ale*_*cxe 10

您可以将其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")
Run Code Online (Sandbox Code Playgroud)

打印:

+-------+-------+
|  Name | Grade |
+-------+-------+
| Alice |   90  |
|  Bill |   90  |
|  Joe  |   90  |
| Sally |  100  |
+-------+-------+
Run Code Online (Sandbox Code Playgroud)