Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python prettytable Sort by Multiple Columns

I'm using PrettyTable to print data to the terminal in a nice table format. It's pretty easy to print it ordered by a single column.

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.

My trouble is I want to sort on two columns. In this surrogate case, I would want to print by grade, and then alphabetically if there was a tie.

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

The docs say that sort_key will allow me to write a function to accomplish this, but I haven't seen an actual implementation to work off.

like image 751
codeMonkey Avatar asked May 24 '16 20:05

codeMonkey


1 Answers

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/

like image 190
Kevin O. Avatar answered Sep 19 '22 06:09

Kevin O.