4

次のタプルがあります。出力に記載されているように出力する文字列を作成したいです。「a」に対応するすべての要素をカウントしたい、つまり、「a」に対して k1 がいくつ発生したかなどを調べます。最も簡単な方法は何ですか?これを行う

a=[('a','k1'),('b','k2'),('a','k2'),('a','k1'),('b','k2'),('a','k1'),('b','k2'),('c','k3'),('c','k4')]

出力は文字列 output="" である必要があります

 a k1  3
 a k2  1
 b k1  1
 b k2  3
 c k3  1
 c k4  1
4

2 に答える 2

6

Counterからのクラスを使用しcollectionsます:

>>> a = [('a', 'k1'), ('b', 'k2'), ('a', 'k2'), ('a', 'k1'), ('b', 'k2'), ('a', 'k1'), ('b', 'k2'), ('c', 'k3'), ('c', 'k4')]
>>> from collections import Counter
>>> c = Counter(a)
Counter({('b', 'k2'): 3, ('a', 'k1'): 3, ('a', 'k2'): 1, ('c', 'k3'): 1, ('c', 'k4'): 1})

c.items()カウントを繰り返すために使用できます。

>>> for item in c.items():
...     print(item)
... 
(('a', 'k2'), 1)
(('c', 'k3'), 1)
(('b', 'k2'), 3)
(('a', 'k1'), 3)
(('c', 'k4'), 1)

上記のコードはPython3です。このCounterクラスはPython2.7の新機能です。これで、アイテムを希望の順序に並べ替えて、必要に応じて文字列に変換できます。

于 2012-06-29T11:18:43.377 に答える
2

defaultdictを使用すると、加算部分を簡単に実行できます。デフォルトのdictは通常の辞書と同じように機能しますが、空のキーストアのデフォルト値があるため、データセットを反復処理するときにカウンターを簡単にインクリメントできます。

a=[('a','k1'),('b','k2'),('a','k2'),('a','k1'),('b','k2'),('a','k1'),('b','k2'),('c','k3'),('c','k4')]
from collections import defaultdict
b = defaultdict(int)
for item in a:
    b[item] += 1

print b
defaultdict(<type 'int'>, {('a', 'k2'): 1, ('c', 'k3'): 1, ('b', 'k2'): 3, ('a', 'k1'): 3, ('c', 'k4'): 1})

そして、きれいに印刷するには、結果のデータを繰り返し処理して、好きなように印刷します。

for key, value in b.iteritems():
    print '%s %s %s' % (key[0], key[1], value)
于 2012-06-29T11:17:39.857 に答える