Есть ли какой-нибудь 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']}