Как мне организовать эту информацию, чтобы она превратилась в словарь без дубликатов? (Тип и имя не имеют значения, они могут повторяться, но кортеж (компания, год_семера, область, модель, категория, мера) не может дублироваться. Возможно, модель, категория или мера отсутствуют во входных данных.
INPUT :
data = [
{
"type": "Y",
"id": "22",
"name": "IX",
"attri": {
"company": "Peugeot",
"year_semester": "2020_1",
"area": "prod",
"items": [
{"model": "XYZ", "category": "CC", "measure": "2"},
{"model": "XYZ", "category": "CC", "measure": "3"},
],
},
},
{
"type": "Y",
"id": "11",
"name": "IY",
"attri": {
"company": "Mazda",
"year_semester": "2019_1",
"area": "prod",
"items": [{"model": "XYZ", "category": "CC", "measure": "2"}],
},
},
{
"type": "Y",
"id": "11",
"name": "IY",
"attri": {
"company": "Mazda",
"year_semester": "2019_1",
"area": "prod",
"items": [
{ # This should't appear because is repeated
"model": "XYZ", # This should't appear because is repeated
"category": "CC", # This should't appear because is repeated
"measure": "2", # This should't appear because is repeated
},
{"model": "VVVV", "category": "CC", "measure": "4"},
],
},
},
{
"type": "Y",
"id": "44",
"name": "IY",
"attri": {"company": "Honda", "year_semester": "2018_1", "area": "prod", "items": []},
},
]
OUTPUT:
expected = [
{
"type": "Y",
"id": "22",
"name": "IX",
"company": "Peugeot",
"year_semester": "2020_1",
"area": "prod",
"model": "XYZ",
"category": "CC",
"measure": "2",
},
{
"type": "Y",
"id": "22",
"name": "IX",
"company": "Peugeot",
"year_semester": "2020_1",
"model": "XYZ",
"category": "CC",
"measure": "3",
},
{
"type": "Y",
"id": "11",
"name": "IY",
"company": "Mazda",
"year_semester": "2019_1",
"area": "prod",
"model": "XYZ",
"category": "CC",
"measure": "2",
},
{
"type": "Y",
"id": "11",
"name": "IY",
"company": "Mazda",
"year_semester": "2019_1",
"area": "prod",
"model": "VVVV",
"category": "CC",
"measure": "4",
},
{
"type": "Y",
"id": "44",
"name": "IY",
"company": "Honda",
"year_semester": "2018_1",
"area": "prod",
},
]
Я пробовал это из другого поста:
def flatten(d, sep="_"):
import collections
obj = collections.OrderedDict()
def recurse(t, parent_key=""):
if isinstance(t, list):
for i in range(len(t)):
recurse(t[i], parent_key + sep + str(i) if parent_key else str(i))
elif isinstance(t, dict):
for k, v in t.items():
recurse(v, parent_key + sep + k if parent_key else k)
else:
obj[parent_key] = t
recurse(d)
return obj
но я не уверен, как избежать дубликатов. И я не могу организовать желаемый вывод. У вас есть идеи?