Wörterbuch-zusammengeführte Werte hinzufügen
Beim Zusammenfassen von Spieldaten werden jeden Tag einige Daten in Wörterbüchern gespeichert. Wenn ich mehrere Tage zusammenfassen möchte, müssen Sie Wörterbücher zusammenführen.
Wenn die Schlüssel gleich sind, werden ihre Werte addiert.
Sie können die Aktualisierungsmethode nicht verwenden, da bei Verwendung der Aktualisierungsmethode die Werte desselben Schlüssels überschrieben statt hinzugefügt werden.
Tausend Worte sind mehr als einen Meter wert.
def union_dict(*objs): _keys = set(sum([obj.keys() for obj in objs],[])) _total = {} for _key in _keys: _total[_key] = sum([obj.get(_key,0) for obj in objs]) return _total obj1 = {'a':1,'b':2,'c':3} obj2 = {'a':1,'b':3,'d':4} print union_dict(obj1,obj2)
Ausgabe
{'a': 2, 'c': 3, 'b': 5, 'd': 4}
sum([obj.keys() for obj in objs],[]) ist möglicherweise nicht leicht zu verstehen.
Tatsächlich verfügt die Funktion sum() auch über „wenig bekannte Parameter“, nämlich den zweiten Parameter, den Startparameter, der standardmäßig 0 ist.
Und es kann nicht nur vom Typ int sein, sondern auch andere Dinge, die den +-Operator unterstützen, wie zum Beispiel [].
Damit kann das zweistufige Array auf eine Ebene reduziert werden.
Zum Beispiel
>>sum([[1,2,3],[4,5]],[]) [1,2,3,4,5]
Wörterbuch diff("XOR")
Im Spiel habe ich Rucksackänderungen im Artikelsystem überwachen und aufzeichnen möchten. (Das Ergebnis von „XOR“ ist, dass dieselben eliminiert werden und die anderen zurückbleiben, also geändert werden.)
Nehmen Sie an, dass die Aufbewahrungsstruktur des Rucksacks so ist.
ist ein Wörterbuch, {Artikel-ID: Menge}.
Kopieren und speichern Sie beim Initialisieren der Rucksackklasse die Rucksackartikelinformationen in einer Oldbag-Variablen, nachdem Sie einige Artikelvorgänge ausgeführt haben (z. B. Artikel verwenden, Artikelbelohnungen erhalten usw.), wenn Sie die Methode save () zum Speichern aufrufen Redis, das neue Vergleichen Sie die Unterschiede zwischen dem Bag-Wörterbuch und dem Oldbag-Wörterbuch, um die Änderungen zu erhalten.
Tausend Worte sind mehr als einen Meter wert.
def symmetric_difference(_oldobj,_newobj): _oldkeys = _oldobj.keys() _newkeys = _newobj.keys() _diff = {} for _key in set(_oldkeys + _newkeys): _val = _newobj.get(_key,0) - _oldobj.get(_key,0) if _val: _diff[_key] = _val return _diff oldobj = {'a':1,'b':2,'c':3} newobj = {'a':1,'b':3,'d':4} print symmetric_difference(oldobj,newobj)
Ausgabe
{'b': 1, 'd': 4,'c': -3}
darstellt Der Spieler hat 1 „B“-Gegenstand, 4 „D“-Gegenstände gewonnen und 3 „C“-Gegenstände verloren.
Weitere Artikel zum Addieren und XOR-Vergleich zusammengeführter Werte in Wörterbüchern in Python finden Sie auf der chinesischen PHP-Website!