46

次のようなデータがあるとします。

Lucy = 1
Bob = 5
Jim = 40
Susan = 6
Lucy = 2
Bob = 30
Harold = 6

組み合わせたい:

  1. 重複するキーを削除し、
  2. これらの重複キーの値を追加します。

つまり、キー/値を取得します。

Lucy = 3
Bob = 35
Jim = 40
Susan = 6
Harold = 6

これには(コレクションから)カウンターまたはデフォルトの辞書を使用する方がよいでしょうか?

4

3 に答える 3

68

Counterここではとの両方defaultdict(int)が正常に機能しますが、両者にはいくつかの違いがあります。

  • Counterは、マルチセットに対して実行できるほとんどの操作をサポートしています。したがって、それらの操作を使用する場合は、カウンターを選択してください。

  • Counter欠落しているキーを照会するときに、辞書に新しいキーを追加しません。したがって、クエリに dict に存在しない可能性のあるキーが含まれている場合は、 を使用することをお勧めしますCounter

例:

>>> c = Counter()
>>> d = defaultdict(int)
>>> c[0], d[1]
(0, 0)
>>> c
Counter()
>>> d
defaultdict(<type 'int'>, {1: 0})

例:

  • Countermost_commonまた、アイテムをその数でソートできるメソッドもあります。同じものを取得するには、defaultdictを使用する必要がありますsorted

例:

>>> c = Counter('aaaaaaaaabbbbbbbcc')
>>> c.most_common()
[('a', 9), ('b', 7), ('c', 2)]
>>> c.most_common(2)          #return 2 most common items and their counts
[('a', 9), ('b', 7)]
  • CounterCounter オブジェクトから要素のリストを作成することもできます。

例:

>>> c = Counter({'a':5, 'b':3})
>>> list(c.elements())
['a', 'a', 'a', 'a', 'a', 'b', 'b', 'b']

したがって、結果の dict で何をしたいかによって、 と の間Counterで選択できますdefaultdict(int)

于 2013-11-09T21:14:03.907 に答える