Как удалить дубликаты из JDS по умолчанию?

(Повторная публикация с точной выборкой данных)

У меня есть словарь JSON, где каждое значение в свою очередь является по умолчанию следующим образом:

"Parent_Key_A": [{"a": 1.0, "b": 2.0}, {"a": 5.1, "c": 10}, {"b": 20.3, "a": 1.0}] я пытаюсь удалить дубликаты ключей и значений, чтобы каждый элемент json имел уникальные значения. Так что для приведенного выше примера я ищу вывод что-то вроде этого:

"Parent_Key_A": {"a": [1.0,5.1], "b": [2.0,20.3], "c": [10]} Затем мне нужно записать этот вывод в файл json. Я пытался использовать set для обработки дубликатов, но set не поддерживает сериализацию json.

Любые предложения о том, как справиться с этим?

1 ответ

Решение

Решение с использованием 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
        ]
    }
}
Другие вопросы по тегам