3

最近、 collections.Counter()クラスについて学びました。これはきちんとした (そして速い??) ものを数える方法なので、使い始めました。

しかし、タプルでカウントを更新しようとすると、実際にはそれをシーケンスとして扱い、挿入した回数をカウントする代わりに、タプル内の各項目のカウントを更新するという事実により、最近プログラムでバグを検出しました。その特定のタプル

たとえば、次のように実行すると:

import collections
counter = collections.Counter()
counter.update(('user1', 'loggedin'))
counter.update(('user2', 'compiled'))
counter.update(('user1', 'compiled'))

print counter

あなたは得るでしょう:

Counter({'compiled': 2, 'user1': 2, 'loggedin': 1, 'user2': 1})

結果として。Counter() でタプルをカウントする方法はありますか? 文字列を連結できますが、これは... 醜いです。名前付きタプルを使用できますか? 独自の非常に単純な辞書カウンターを実装しますか? 何が一番いいのかわからない。

4

1 に答える 1

7

確かに: 1 レベルの間接化を追加するだけで済みます。つまり.update、要素としてタプルを含むコンテナーを渡します。

>>> import collections
>>> counter = collections.Counter()
>>> counter.update((('user1', 'loggedin'),))
>>> counter.update((('user2', 'compiled'),))
>>> counter.update((('user1', 'compiled'),))
>>> counter.update((('user1', 'compiled'),))
>>> counter
Counter({('user1', 'compiled'): 2, ('user1', 'loggedin'): 1, ('user2', 'compiled'): 1})
于 2012-08-09T12:18:20.843 に答える