2017-07-10 2 views
1

(Re-post mit genauer Datenabtastwert)Wie du Duplikate aus einem JSON-Standarddict entfernen kannst?

I einen json Wörterbuch habe, wo jeder Wert der Reihe nach einem defaultdict ist wie folgt:

"Parent_Key_A": [{ "a": 1,0, "b" : 2.0}, {"a": 5.1, "c": 10}, {"b": 20.3, "a": 1.0}] Ich versuche, doppelte Schlüssel und Werte zu entfernen, so dass jedes Element des JSON hat einzigartige Werte. Also für das obige Beispiel suche ich etwa so etwas:

"Parent_Key_A": {"a": [1.0.5.1], "b": [2.0.20.3], "c": [10 ]} Dann muss ich diese Ausgabe in eine JSON-Datei schreiben. Ich habe versucht, Set zu verwenden, um Duplikate zu behandeln, aber Set ist nicht Json serialisierbar.

Haben Sie Vorschläge, wie Sie damit umgehen sollen?

+0

Warum bearbeitet nicht nur die * alt * Post die genaue Datenprobe haben? –

+0

Ich habe den älteren Beitrag gelöscht. –

Antwort

0

Die Lösung itertools.chain() und itertools.groupby() Funktionen:

import itertools, json 

input_d = { "Parent_Key_A": [{"a": 1.0, "b": 2.0}, {"a": 5.1, "c": 10}, {"b": 20.3, "a": 1.0}] }  

items = itertools.chain.from_iterable(list(d.items()) for d in input_d["Parent_Key_A"]) 
# dict comprehension (updated syntax here) 
input_d["Parent_Key_A"] = { k:[i[1] for i in sorted(set(g))] 
          for k,g in itertools.groupby(sorted(items), key=lambda x: x[0]) } 
print(input_d) 

Der Ausgang:

{'Parent_Key_A': {'a': [1.0, 5.1], 'b': [2.0, 20.3], 'c': [10]}} 

Drucken auf JSON-Datei:

json.dump(input_d, open('output.json', 'w+'), indent=4) 

output.json Inhalt:

{ 
    "Parent_Key_A": { 
     "a": [ 
      1.0, 
      5.1 
     ], 
     "c": [ 
      10 
     ], 
     "b": [ 
      2.0, 
      20.3 
     ] 
    } 
} 
+0

vielen Dank @RomanPerekruh! –

+0

@ D.prd, Willkommen, Schreiben in JSON-Datei ist auch getan – RomanPerekhrest

Verwandte Themen