在 Django 中是否有任何 Pythonic 方式来操纵字典以遵循 DRY 哲学?
Is there any Pythonic way to manipulate Dictionaries to follow DRY philosophy in 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",
]
}
}
如何实现?
编辑:
实际上我有产品,产品有变体,每个变体可能有 VariantAttributes。 VariantAttributes 有 primary_attr、primary_aatr_value(这些就像颜色:绿色、color:red、color:green)
对于该产品; ProductVariant 的 ProductAttribute primary_attr_name 将相同,例如:颜色,但每个变体的值将不同。我正在尝试用字典解决这个问题。
在这里很难说出你真正想要什么,但如果我的猜测是正确的话......
给定您拥有的数据,如果您想将其分组到属性 -> 值映射,使用 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']}
我有如下所示的所需查询的字典集:
[
{
"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",
]
}
}
如何实现?
编辑: 实际上我有产品,产品有变体,每个变体可能有 VariantAttributes。 VariantAttributes 有 primary_attr、primary_aatr_value(这些就像颜色:绿色、color:red、color:green)
对于该产品; ProductVariant 的 ProductAttribute primary_attr_name 将相同,例如:颜色,但每个变体的值将不同。我正在尝试用字典解决这个问题。
在这里很难说出你真正想要什么,但如果我的猜测是正确的话......
给定您拥有的数据,如果您想将其分组到属性 -> 值映射,使用 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']}