基于Python中的键列表动态创建json

2024-04-27 18:35:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有多个字符串列表,我想成为我的JSON键。你知道吗

例如,我有以下列表:

['dev', 'aws', 'test']
['dev', 'azure', 'test']
['prod', 'aws', 'test']

基于此,我想用这些表示键的值创建JSON的主干。你知道吗

这是我想要的输出:

{
    "dev": {
        "aws": {
            "test": ""
        },
        "azure": {
            "test": ""
        }
    },
    "prod": {
        "aws": {
            "test": ""
        }
    }

}

我的问题是,我需要动态地创建它,因为键不是静态的,而且可能会更改。你知道吗

我想不出一个动态创建的方法,而且在网上也找不到帮助,所以如果你对如何处理这个案子有任何想法,我会非常感激的。你知道吗

非常感谢。你知道吗


Tags: 方法字符串devtestawsjson列表静态
3条回答

这是一种使用dict.setdefault的方法

例如:

data = [
    ['dev', 'aws', 'test'],
    ['dev', 'azure', 'test'],
    ['prod', 'aws', 'test']
]
result = {}
for k,v, m in data:
    result.setdefault(k, {}).setdefault(v, {}).update({m: ''})

print(result)

输出:

{'dev': {'aws': {'test': ''}, 'azure': {'test': ''}},
 'prod': {'aws': {'test': ''}}}

这应该起作用:

def add_elem(json, keys, val):
    parent = json
    for k in keys[:-1]:
        if k not in parent:
            parent[k] = {}
        parent = parent[k]
    parent[keys[-1]] = val


d = {}
paths = [
    ['dev', 'aws', 'test'],
    ['dev', 'azure', 'test'],
    ['prod', 'aws', 'test']
]

for keys in paths:
    add_elem(d, keys, "")

print(d)

输出:

{'dev': {'aws': {'test': ''}, 'azure': {'test': ''}}, 'prod': {'aws': {'test': ''}}}

如果我们将输入视为列表列表:

lol = [
    ['dev', 'aws', 'test'], 
    ['dev', 'azure', 'test'], 
    ['azure', 'dev', 'azure']
]

然后可以使用以下命令:

d = {}
for lst in lol:
    use = d # make sure that for each list we refer to the base dictionary
    *head, tail = lst # unpack so we can...
    for key in head: # ... loop over each except the trailing key
        use = use.setdefault(key, {}) # default to a dict and point `use` to the result
    use[tail] = '' # assign blank string to last element

这就给了你d

{
    "dev": {
        "aws": {
            "test": ""
        },
        "azure": {
            "test": "",
            "test2": ""
        }
    }
}

相关问题 更多 >