Counter ist Werkzeug, das Elemente in einem iterable als dict speichert, wobei die Elemente repräsentieren dict.keys()
und dict.values()
repräsentieren die Anzahl der dieses Element in der iterable.
In einem Wörterbuch können Sie jedoch keine sich wiederholenden Schlüssel haben, da die Schlüssel eindeutig sein müssen. Es macht daher keinen Sinn, etwas zu zählen, da wir bereits wissen, dass es 1 ist. Andererseits können sich im Diktat repetitive Werte befinden. Zum Beispiel:
>>> from collections import Counter
>>> my_dict = {'a': 'me', 'b':'you', 'c':'me', 'd':'me'}
>>> Counter(my_dict) # As plain dict.
Counter({'b': 'you', 'a': 'me', 'c': 'me', 'd': 'me'})
>>> Counter(my_dict.values()) # As dict values.
Counter({'me': 3, 'you': 1})
Lassen Sie uns jetzt sagen, dass wir Liste der Wörterbücher haben, und wir wollen die Werte in diesen Wörterbücher begegnen; wie es der Fall in Ihrer Frage:
>>> my_dict = [
... {'age': 30, 'name': 'John'},
... {'age': 20, 'name': 'Jeff'},
... {'age': 30, 'name': 'John'},
... {'age': 25, 'name': 'John'}
... ]
>>> Counter(tuple(i.values()) for i in a) # As a generator of values as tuple.
Counter({(30, 'John'): 2, (25, 'John'): 1, (20, 'Jeff'): 1})
Jetzt können Sie natürlich dieses Tupel nehmen und wandeln sie in einem dict
:
>>> {key: value for key, value in b.items()}
{(25, 'John'): 1, (30, 'John'): 2, (20, 'Jeff'): 1}
oder sogar noch weiter gehen, und verwenden Sie named tuples von collections.namedtuple
und identifizieren Sie Ihre Tupel nach Namen, auf die Sie später viel leichter und klarer Bezug nehmen können.
Hoffe, das hilft.
Erfahren Sie mehr über collections.Counter
von der documentations oder diese nützliche set of examples. Sie können sich auch auf Videos von Raymond Hettinger (Python-Betreuer von collections
toolbox) auf YouTube beziehen. Er hat einige tolle Tutorials zu verschiedenen Tools.
'{d [ "id"]: d für d in my_list}' –
https: // wiki .python.org/moin/DictionaryKeys – dm295
Sie können ein Wörterbuch nicht als Schlüssel in einem anderen Wörterbuch verwenden. –