2016-05-24 7 views
5

私は素敵なテーブル形式で端末にデータを印刷するためにPrettyTableを使用しています。 1列で注文するのはかなり簡単です。Python 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. 

私の問題は2つの列を並べ替えることです。この代理の場合、私は等級があればグレードで、そしてアルファベット順に印刷したいと思っています。

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は私がこれを達成するための機能を書き込むことができるようになると言うが、私はオフ動作するように実際の実装を見ていません。

答えて

7

operator.itemgetter()にはsort_keyという値を付けることができます。 sort_keyを適用するためにsortbyはまだ与えられたする必要があることに注意してください:

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 | 
+-------+-------+ 
+0

1列にreversesortを適用する方法上の任意の考え?つまり、Sally、Alice、Bill、Joeを作成します。私がGrade列を逆順に並べたからです。 – codeMonkey

+0

ちょっと@alecxe私の場合にも助けてくれてありがとう、「グレード」を降順で並べ替える方法を考えています。(0,1)(1,1)のような組み合わせを試しましたが、 –