【问题标题】:Python prettytable Sort by Multiple ColumnsPython prettytable 按多列排序
【发布时间】:2016-09-22 05:59:37
【问题描述】:

我正在使用 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 将允许我编写一个函数来完成此操作,但我还没有看到一个实际的实现。

【问题讨论】:

    标签: python sorting prettytable


    【解决方案1】:
    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)
    

    来源:https://zetcode.com/python/prettytable/

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 对如何对一列应用反向排序有任何想法吗?即,生成 Sally、Alice、Bill、Joe,因为我已经对 Grade 列进行了反向排序。
      • 嘿@alecxe 感谢您的回答,它也对我的情况有帮助,只是想知道如何按降序对“等级”进行排序我尝试了所有组合,如 (0,1) (1,1) 但没有一个似乎工作
      • @AhsanNaseem 使用reverse = Truearg
      • 不适合我使用sort_key
      猜你喜欢
      • 1970-01-01
      • 2016-01-16
      • 2018-04-29
      • 2013-09-07
      • 2014-04-11
      • 2018-03-12
      • 2021-06-18
      • 2019-08-13
      相关资源
      最近更新 更多