2017-07-10 19 views
1

(再後用準確的數據樣本)如何從json defaultdict中刪除重複項?

我有一個JSON字典,其中依次在每個值是defaultdict如下:

「Parent_Key_A」:[{ 「一」:1.0, 「b」 的:2.0},{「a」:5.1,「c」:10},{「b」:20.3,「a」:1.0}] 我試圖刪除重複的鍵和值,有獨特的價值。所以對於上面的例子,我正在尋找這樣的輸出:

「Parent_Key_A」:{「a」:[1.0,5.1],「b」:[2.0,20.3],「c」:[10 ]} 然後我需要將這個輸出寫入一個json文件。我嘗試使用集來處理重複,但設置不是JSON可序列化。

有關如何處理此問題的任何建議?

+0

爲什麼不直接編輯*老*後有準確的數據樣本? –

+0

我實際上刪除了舊帖子。 –

回答

0

使用itertools.chain()itertools.groupby()函數的溶液:

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) 

輸出:

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

打印到JSON文件:

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

output.json內容:

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

非常感謝@RomanPerekhrest! –

+0

@ D.prd,歡迎寫信給json文件也完成 – RomanPerekhrest