首页 > 解决方案 > 从python中的字典制作嵌套字典对象

问题描述

我正在尝试根据数据库查询结果在字典中构建响应对象。从查询结果看,我的数据是这样的。

data = [
    {
        "form": "form-name",
        "path": "/errr",
        "category": "cat1"
    },
    {
        "form": "form-name",
        "path": "/ddf/",
        "category": "cat1"
    },
    {
        "form": "form-name",
        "path": "/qqq",
        "category": "cat2"
    },
    {
        "form": "form-name",
        "path": "/www",
        "category": "cat2"
    },

]

我想制作另一个这样的数据集,请参阅示例。

[
   { 
       "cat1" : [

            {
            "form": "form-name",
            "path": "/kllk",
            },
            {
            "form": "form-name",
            "path": "/wer",
            },

       ],
       "cat2" : [

            {
            "form": "form-name",
            "path": "/yuje",
            },
            {
            "form": "form-name",
            "path": "/tyyy",
            },

       ]
   }

]

到目前为止,我从第一个数据集中取出类别并将其存储在列表中并运行一个函数以使其成为唯一类别。

c = []
for d in data:
    if d['category']:        
        c.append(d['category'])

# Function to make a unique category not to duplicate
def unique_value(value):
    unique_value_string = []
    myvalue = set(value)

    for v in myvalue:
        unique_value_string.append(v)

    return unique_value_string
keys = unique_value(c)

k = keys

d = dict(zip(k, data))

#this is final result 
{'cat2': {'form': 'form-name', 'path': '/errr', 'category': 'cat1'}, 'cat1': {'form': 'form-name', 'path': '/ddf/', 'category': 'cat1'}}
final keys: ['cat2', 'cat1']

如您所见,这是不正确的。请建议我任何更好的解决方案。

提前致谢

标签: pythonlistdictionary

解决方案


尝试:

data = [
    {"form": "form-name", "path": "/errr", "category": "cat1"},
    {"form": "form-name", "path": "/ddf/", "category": "cat1"},
    {"form": "form-name", "path": "/qqq", "category": "cat2"},
    {"form": "form-name", "path": "/www", "category": "cat2"},
]

out = {}
for d in data:
    out.setdefault(d["category"], []).append(d)

for d in out.values():
    for v in d:
        del v["category"]

print([out])

印刷:

[
    {
        "cat1": [
            {"form": "form-name", "path": "/errr"},
            {"form": "form-name", "path": "/ddf/"},
        ],
        "cat2": [
            {"form": "form-name", "path": "/qqq"},
            {"form": "form-name", "path": "/www"},
        ],
    }
]

推荐阅读