如何更正代码以生成嵌套字典?

2024-03-28 08:37:08 发布

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

我正在尝试创建嵌套词典。我有一个元组列表(称为“动力学参数”),如下所示:

('New Model','v7','k1',0.1)
('New Model','v8','k2',0.2)
('New Model','v8','k3',0.3)

我需要第二列是外键,值是另一个字典,内键是第三列,值是第四列中的数字。你知道吗

我目前有:

    for i in kinetic_parameters:
        dict[i[1]]={}
        dict[i[1]][i[2]]=i[3]

但是这个代码不会处理内部字典中的多个键,所以我丢失了一些信息。有人知道怎么纠正我的问题吗?你知道吗

我使用的是Python 2.7,我希望输出如下所示:

{'v7': {'k1': 0.1}, 'v8':{'k2':0.2, 'k3': 0.3}}

Tags: 列表new参数model字典k2k1动力学
3条回答

使用defaultdict,不要使用dict作为变量名,因为我们需要它来引用字典类型:

import collections
d = collections.defaultdict(dict)
for i in kinetic_parameters:
    d[i[1]][i[2]]=i[3]

这将自动创建词典。你知道吗

在您的代码中,每个循环字典都被重新初始化。您需要先初始化字典,然后向其中添加项

for i in kinetic_parameters:
        d[i[1]]={}
for i in kinetic_parameters:
        d[i[1]][i[2]]=i[3]

或者在初始化前检查

for i in kinetic_parameters:
        if d.get(i[1]) is None:
            d[i[1]]={}
        d[i[1]][i[2]]=i[3]

是的,如果在使用现有词典之前已经看到主(“外”)键。或者反过来说:只在不存在的情况下创建一个嵌入式字典,然后添加值。以下是逻辑,为了清晰起见,使用元组赋值:

nested = dict()
for row in kinetic_parameters:
    _model, outkey, inkey, val = row
    if outkey not in d:
        nested[outkey] = dict()  
    nested[outkey][inkey] = val

或者您可以使用defaultdict跳过存在性检查,它可以根据需要创建新的嵌入式dict:

from collections import defaultdict
nested = defaultdict(dict)
for row in kinetic_parameters:
    _model, outkey, inkey, val = row
    nested[outkey][inkey] = val

相关问题 更多 >