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)