Durch Hinzufügen von Zählern werden Schlüssel gelöscht

Siehe unten, warum die Implementierung von+= Einen Schlüssel in meinem Originalzähler wegblasen?

>>> c = Counter({'a': 0, 'b': 0, 'c': 0})
>>> c.items()
[('a', 0), ('c', 0), ('b', 0)]
>>> c += Counter('abba')
>>> c.items()
[('a', 2), ('b', 2)]

Ich denke, das ist gelinde gesagt unhöflich. Es gibt einen großen Unterschied zwischen "X wurde 0-mal gezählt" und "Wir zählen nicht einmal Xs". Wie es scheintcollections.Counter ist überhaupt kein Zähler, es ist eher wie ein Multiset.

Aber Zähler sind eine Unterklasse von Diktaten und wir dürfen sie mit null oder negativen Werten konstruieren:Counter(a=0, b=-1). Wenn es sich tatsächlich um eine "Tüte voller Dinge" handelt, wäre dies dann nicht verboten und würde init einschränken, eine Reihe von hashbaren Gegenständen zu akzeptieren?

Um die Sache noch weiter zu verwirren, setzt Gegenmittel einupdate undsubtract Methoden, die sich anders verhalten als+ und- Betreiber. Diese Klasse scheint eine Identitätskrise zu haben!

Ist ein Counter ein Diktat oder eine Tasche?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage