2016-05-24 20 views
5

Güzel bir formatta veriyi terminale yazdırmak için PrettyTable kullanıyorum. Tek bir sütunla sipariş vermek oldukça kolay.Python prettytable Birden Çok Sütunlara Göre Sırala

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. 

Sorunum iki sütunu sıralamak istiyorum. Bu vesileyle, notu basmak istiyorum, ve eğer bir kravat varsa alfabetik olarak.

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 

docs sort_key bana bunu gerçekleştirmek için bir işlev yazmak sağlayacaktır söylüyorlar, ama ben kapalı çalışmak için gerçek uygulama görmedim.

cevap

7

operator.itemgetter() değerini sort_key değeri olarak arayabilirsiniz. sortby hala uygulanacak sort_key için verilmesi gereken unutmayın:

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") 

Baskılar: Bir sütuna reversesort nasıl uygulanacağı hakkında

+-------+-------+ 
| Name | Grade | 
+-------+-------+ 
| Alice | 90 | 
| Bill | 90 | 
| Joe | 90 | 
| Sally | 100 | 
+-------+-------+ 
+0

herhangi bir düşünce? Yani, Grade sütununu tersine çevirdiğimden, Sally, Alice, Bill, Joe üretin. – codeMonkey

+0

Hey @alecxe teşekkürler de benim durumumda da yardımcı oluyor, sadece "Grade" ini azalan sırada nasıl sıralayacağımı merak ediyorum (0,1) (1,1) gibi tüm kombinasyonları denedim ama işe yaramaz gibi görünüyor –

İlgili konular