2017-04-27 2 views
0

Ich verwende das Modul tabulate, um Informationen auf der Konsole zu drucken. Ich verwende Python 2.6Wie gruppiert man die Spalten alphabetisch mit dem Tabulate-Modul?

ich dies derzeit haben:

+-------------------------------+ 
| Task | Status | Rating | 
|---------+---------------------+ 
| A | Done | Good | 
| B | Done | Bad | 
| C | Pending |   | 
| D | Done | Good | 
+---------+----------+----------+ 

Ich möchte dies zu realisieren:

+-------------------------------+ 
| Task | Status | Rating | 
|---------+---------------------+ 
| A | Done | Good | 
| B | Done | Bad | 
| D | Done | Good | 
| C | Pending |   | 
+---------+----------+----------+ 

So, dass alle der Done s zusammen gruppiert sind.

Derzeit erhält das tabellieren ein Wörterbuch und ich entpacken Sie die Werte wie folgt aus:

def generate_table(data): 
    table = [] 
    headers = ['Task', 'Status', 'Rating'] 

    for key, value in data.iteritems(): 
     print key, value 

     if 'Rating' in value: 
      m, l = value['Status'], value['Rating'] 
      m = m.split('/')[-1] 
      temp = [key,m,l] 
      table.append(temp) 
     else: 
      m, l = value['Status'], None 
      m = m.split('/')[-1] 
      temp = [key,m,l] 
      table.append(temp) 

    print tabulate(table, headers, tablefmt="psql") 
+3

In Ihrem Beispiel tauscht die gewünschte Ausgabe die ausstehende Aufgabe von C nach D. Ist das beabsichtigt? – languitar

+1

Sie können das 'if'' else' mit Sicherheit vermeiden, wenn Sie 'value.get ('Rating', None)' verwenden, das einen Standardwert ('None' in diesem Fall) zuweist, wenn der Schlüssel (' 'Rating'' in diesem Fall) ist nicht Teil des Wörterbuchs. Für den Rest kann man nur antworten, wenn man auf @languitar –

+0

@languitar antwortet, das war ein Fehler. Guter Fang – ARL

Antwort

1

Sie können Ihre resultierende Tabelle nach Spalte Status nach dem sortieren for-Schleife:

sorted(table, key=lambda status: status[1])

Dieser Wille effektiv "gruppieren" Sie die Werte alphabetisch.

Verwandte Themen