2017-04-27 3 views
0

tabulateモジュールを使用して、コンソールで情報をうまく印刷しています。 Done Sの全てが一緒にグループ化されるようにtabulateモジュールをアルファベット順にグループ化するにはどうすればいいですか?

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

:私はこれに行きたい

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

:私は現在、これを持っているのpython 2.6

を使用しています。

現在tabulateの辞書を受け取り、私はこのような値を展開します。

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

この例では、保留中のタスクをCからDにスワップします。これは意図的なものですか? – languitar

+1

'value.get( 'Rating'、None)'を使用すると 'else'を避けることができます。これは、キー(' 'Rating'')がデフォルト(' 'None'')この場合)は辞書の一部ではありません。残りの人は@languitar –

+0

@languitar noに返信したときにしか答えられませんが、間違いでした。良いキャッチ – ARL

答えて

1

あなたは後にステータス]列によってあなたの結果のテーブルを並べ替えることができ、あなたのforループ:

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

この意志アルファベット順に値を効果的に「グループ化」します。

関連する問題