0

Pythonの辞書で値の出現数を数える方法

a = dict()
a['cat'] =      1
a['fish'] =     1
a['dog'] =      2  
a['bat'] =      3
a['aardvark'] = 3
a['lion'] =    4  
a['wallaby'] =  5
a['badger'] =   5

期待される出力:

KEY  Count
 1   2
 2   1
 3   2
 4   1
 5   2 

EDIT

申し訳ありませんが、私は値を数えることを言うつもりでした

4

6 に答える 6

3

collections.Counterを使用したいと思います。ほとんどのカウントのユースケースを簡単に処理できます。

from collections import Counter
a = dict()
a['cat'] =      1
a['fish'] =     1
a['dog'] =      2  
a['bat'] =      3
a['aardvark'] = 3
a['lion'] =    4  
a['wallaby'] =  5
a['badger'] =   5

print Counter(a.values())    

出力:Counter({1: 2, 3: 2, 5: 2, 2: 1, 4: 1})

または、少しフォーマットするには、次のようにします。

for key, value in Counter(a.values()).most_common():
    print key, value

出力:

1 2
3 2
5 2
2 1
4 1

または、出力を正確に一致させるには:

for key, value in sorted(Counter(a.values()).items()):
    print key, value

ここでは、キー (1 から 5 までの数字) で並べ替えました。

于 2012-07-02T12:58:41.480 に答える
1

collections.Counter は、このジョブに最適なツールです (Martijn Pieters による回答を参照)。ただし、python 2.7 で導入されました。2.5 以降のソリューションが必要な場合:

from collections import defaultdict
d=defaultdict(int)
for v in a.values():
    d[v]+=1
于 2012-07-02T13:05:40.420 に答える
1
>>> from collections import Counter
>>> Counter(a.values())
Counter({1: 2, 3: 2, 5: 2, 2: 1, 4: 1})
于 2012-07-02T12:58:53.163 に答える
0

値の合計が必要な場合は、次のようにします。

sum(a.values())

発生回数の頻度が必要な場合は、次のようにします。

from collections import Counter
Counter(a.values()).items()
于 2012-07-02T12:59:10.227 に答える
0

これは、何もインポートせずに非常に簡単に実行できます。

results={}
for v in a.values():
   results[v]=results.get(v, 0) + 1

for k,v in results.items():
    print k,v

出力:

1 2
2 1
3 2
4 1
5 2
于 2012-07-02T13:27:49.887 に答える
0

恐ろしい予感がして、はっきりしないが、それlen(a)が答えかもしれない…

ただし、次の可能性もあります。

from collections import Counter
Counter(a.values())

可能性も高いです。

于 2012-07-02T13:01:41.733 に答える