Wörterbücher in einer Liste :: Verschmelzung-Werte für den Gleichen Schlüssel
Ich habe mehrere Wörterbücher innerhalb einer Python-Liste, wie unten
[{"color": "#CC3", "values": {"y": 83, "x": 9}, "key": 105},
{"color": "#CC3", "values": {"y": 123, "x": 10}, "key": 105},
{"color": "#FF9", "values": {"y": 96, "x": 11}, "key": 106},
{"color": "#33F", "values": {"y": 80, "x": 12}, "key": 104},
{"color": "#CC3", "values": {"y": 117, "x": 13}, "key": 105},
{"color": "#CC3", "values": {"y": 115, "x": 14}, "key": 105},
{"color": "#CC3", "values": {"y": 102, "x": 15}, "key": 105},
{"color": "#FF9", "values": {"y": 111, "x": 16}, "key": 106},
{"color": "#FF9", "values": {"y": 33, "x": 17}, "key": 106}]
In der obigen Liste enthalten Wörterbücher ,es gibt Schlüssel namens "Schlüssel", deren Wert gleich ist , z.B. 105 , 106 etc. , In denen dictionary ,wird der Wert der "Werte" variiert , z.B. "values": {"y": 83, "x": 9}
und "values": {"y": 117, "x": 13}
für 105.
Möchte ich hinzufügen, und bringen Sie die Werte für die gleichen "key=xxx" Wörterbücher in einem Wörterbuch
Sagen wir zum Beispiel ,für Wörterbücher mit key=105 , möchte ich insgesamt die "Werte": [{"y": 83, "x": 9},{"y": 117, "x": 13}]
sagen, in einer Liste wie dieser
Den endgültigen konsolidierten Ausgabe sollte die Erhaltung der ursprünglichen Struktur oben zitierten
[{"color"="...","values"=[{...},{...}],"key"="..."},....]
Was ist der beste Weg, dies zu erreichen ?
- "Wie Sie sehen können" ist nicht wirklich wahr. Sie müssen nehmen einige Sorgfalt bei der Formatierung Ihrer Frage, wenn Sie wirklich wollen, dass wir sehen können. 😉
- Danke für den Hinweis, ich hoffe, ich habe gerahmten es jetzt richtig!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie eine
Sammlungen.defaultdict
.Wenn Sie
list
, wird es automatisch leere Listen erstellt, wenn ein neuer Schlüssel zugegriffen wird.dict(result)
ist jetzt:databykey
ist jetztProbieren Sie etwas wie dieses:
Für dein Beispiel
values_for_105
:Wenn Sie nur wollen, um die Gruppierung der Elemente nach einem Schlüssel, dann nutzen Sie die
itertools.groupby
Funktion und es tut dies direkt, mit keine unordentlichen overhead für das erzeugen von Instanzen vondefaultdict
:Diese produziert:
(von meinem test-Beispiel unten).
Dies ist ein guter Weg, um dies zu umgehen, weil (a) er lässt die original Tasten im inneren des dicts (die Sie können wählen, zu ignorieren, wenn Sie wollen, aber Sie sind nicht beschränkt durch Sie zu entfernen.. so ist das weniger verlustbehaftet) und (b) Sie tun können, gruppiert Operationen/Aggregationen (Beispiel unten).
Nehme an, dass Ihre erste Liste von Wörterbüchern genannt
list_of_dicts
und Sie möchten, dass eine neue Liste der Wörterbücher, die als Ausgang, nur mit derx
undy
Einträge aggregiert Sie zu addieren.Wenn ich mit dem folgenden test Eingang:
dann bekomme ich das Ergebnis unten:
itertools.groupby
erfordert, dass die Elemente sortiert nach dem Schlüssel (d.h. die 100s müssen zusammen sein), das kann manchmal lästig werden. Zweitens, diedefaultdict
Ansatz muss nicht verlustbehaftet überhaupt-- man könnte Sie einfach fügen Sie den dict-selbst, stattd["values"]
.groupby
Sie brauchen nichts zu Sortieren. Sie übergeben Sie eine Funktion, die Auszüge, was Schlüssel, den Sie wollen.random.shuffle
Ihrelist_of_dicts
und betrachten Sie die Ausgabe, um zu sehen, was ich meine.