Python漂亮表格按多列排序

14

我正在使用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可以让我编写一个函数来实现这个功能,但我还没有看到实际的实现方法。

2个回答

13
你可以将 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  |
+-------+-------+

如何将 reversesort 应用于一列?例如,当我对“成绩”列进行了反向排序时,产生 Sally、Alice、Bill、Joe。 - codeMonkey
嘿@alecxe,感谢您的回答,它也有助于我的情况,我只是想知道如何按降序排序“等级”,我尝试了所有组合,例如(0,1)(1,1),但似乎都不起作用。 - Ahsan Naseem
1
@AhsanNaseem 使用 reverse = True 参数。 - Samaksh Gupta
使用 sort_key 对我不起作用。 - Nam G VU
sort_key=operator.imagegetter(-1,0)将按照成绩降序排列,并按名称字母顺序排序。 - WombatPM

2
from prettytable import PrettyTable
    
x = PrettyTable()
x.field_names = ["City name", "Area", "Population", "Annual Rainfall"]

x.add_row(["Adelaide", 1295, 1158259, 600.5])
x.add_row(["Brisbane", 5905, 1857594, 1146.4])
x.add_row(["Darwin", 112, 120900, 1714.7])
x.add_row(["Hobart", 1357, 205556, 619.5])
x.add_row(["Sydney", 2058, 4336374, 1214.8])
x.add_row(["Melbourne", 1566, 3806092, 646.9])
x.add_row(["Perth", 5386, 1554769, 869.4])

print("Table sorted by population:")
x.sortby = "Population"
print(x)

Source: https://zetcode.com/python/prettytable/


1
这并没有回答问题,问题明确要求进行两列排序。 - Ryan Leach

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接