在 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']}