2017-06-26 27 views
2

異なる値の数をカウントするには、dict booksに値の逆出力の出現回数に応じて表示されます。このような辞書の並べ替えと並べ替え

books = { 
    123457889: 'A', 
    252435234: 'A', 
    434234341: 'B', 
    534524365: 'C', 
    354546589: 'D', 
    146546547: 'D', 
    353464543: 'F', 
    586746547: 'E', 
    511546547: 'F', 
    546546647: 'F', 
    541146127: 'F', 
    246546127: 'A', 
    434545127: 'B', 
    533346127: 'E', 
    544446127: 'F', 
    546446127: 'G', 
    155654627: 'G', 
    546567627: 'G', 
    145452437: 'H', 
} 

出力:

'F': 5, 
'A': 3, 
'G': 3, 
'B': 2, 
'D': 2, 
'E': 2, 
'C': 1, 
'H': 1 

が、私はそれを試してみました:

import pprint 

# to get the values from books 
clist = [v for v in books.values()] 

# values in books as keys in count, 
count = {} 
for c in clist: 
    count.setdefault(c, 0) 
    count[c] += 1 

pprint.pprint(count) 

しかし、dictのソートができませんでした。

答えて

6

コードは正常に動作します。これを行うには、コレクションモジュールからCounterを使用すると簡単に実行できます。単にCounterにしてbooks.values()を渡す:

from collections import Counter 
counts = Counter(books.values()) 
print(counts) 

出力:

Counter({'F': 5, 'A': 3, 'G': 3, 'E': 2, 'D': 2, 'B': 2, 'H': 1, 'C': 1}) 

を使用すると、値の順に期待している出力のレイアウトを提供するには、most_common方法と印刷を使用して単純な反復処理を実行することができます各ライン:

for char, value in counts.most_common(): 
    print("'{}': {}".format(char, value)) 

出力:

'F': 5 
'G': 3 
'A': 3 
'E': 2 
'D': 2 
'B': 2 
'C': 1 
'H': 1 
+0

OPを表示する方法を正確に*表示するには、次のように '.most_common()'を使用します:counts.most_common()内のcount:count(count)値)+ "':" + str(count)+ "、") ' –

+1

@ViníciusAguiar確かに。私は質問の最後に追加しましたが、この場合は 'most_common'は必要ありません。出力がコレクション全体のものになることを見て、単純に 'items'メソッドを使うだけで十分でしょう。 – idjaw

+2

クール!はい、私は 'most_common'を使用しました。なぜなら、目的の出力ではアイテムがソートされていて、これがソートされた最も効率的な方法だとわかっているからです。 –

関連する問題