Есть ли какой-нибудь Pythonic способ манипулировать словарями, чтобы следовать философии DRY в Django?

У меня есть словарный набор необходимых запросов, как показано ниже:

[
    {
        "primary_attribute__name": "Color"
        "primary_attr_values__name": "Red",
    },
    {
        "primary_attribute__name": "Color",
        "primary_attr_values__name": "Green",
    },
]

Теперь я хочу :

[
    {
        "primary_attribute__name": "Color"
        {
            "primary_attr_values__name": "Red",
            "primary_attr_values__name": "Green",
            "primary_attr_values__name": "Yellow",
        },
    }
]

Или вот такой подход:

primary_attribute = {
    "Color": {
        "primary_attr_values__name": [
            "red",
            "green",
            "yellow",
        ]
    }
}

Как этого можно достичь?

Трудно сказать, чего вы на самом деле хотите, но если моя догадка верна...

При таких данных, как у вас есть, если вы хотите сгруппировать их для отображения атрибутов -> значений, это легко сделать с помощью defaultdict:

from collections import defaultdict

data = [
    {
        "primary_attribute__name": "Color",
        "primary_attr_values__name": "Red",
    },
    {
        "primary_attribute__name": "Color",
        "primary_attr_values__name": "Green",
    },
    {
        "primary_attribute__name": "Color",
        "primary_attr_values__name": "Blue",
    },
    {
        "primary_attribute__name": "Shape",
        "primary_attr_values__name": "Circle",
    },
    {
        "primary_attribute__name": "Shape",
        "primary_attr_values__name": "Rectangle",
    },
]

attribute_values = defaultdict(list)

for datum in data:
    attr_name = datum["primary_attribute__name"]
    attr_value = datum["primary_attr_values__name"]
    attribute_values[attr_name].append(attr_value)

print(dict(attribute_values))

Это выводит

{'Color': ['Red', 'Green', 'Blue'], 'Shape': ['Circle', 'Rectangle']}
Вернуться на верх