词典的扁平化提高了属性错误

2024-09-30 20:23:12 发布

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

我有一本字典:

dict1 = {
    'conf1' : {'subconf11' : True, 'subconf12' : False}, 
    'conf2' : False, 
    'conf3' : {'subconf31' : True, 'subconf32' : False, 'subconf33' : False}, 
    'conf4' : 'On'
}

我想将其展平为元组列表,以便:

list1 = [
    ('conf1',('subconf11',True)),
    ('conf1',('subconf12',False)),
    ('conf2',False),
    ('conf3',('subconf31',True)),
    ('conf3',('subconf32',False)),
    ('conf3',('subconf33',False)),
    ('conf4','On')
]

我试过这样的方法:

primary_conf_list = list(dict1.keys())
list2 = [(i,list[dict1[i].items()]) for i in primary_conf_list]

但可以理解的是,对于那些值不是字典而是布尔值或字符串值的情况,它会给我带来错误。例如dict1['conf2']dict1['conf4']

以下是确切的错误消息:

AttributeError: 'bool' object has no attribute 'items'

请帮助我实现这一目标


Tags: falsetrue字典onlistdict1conf2conf3
1条回答
网友
1楼 · 发布于 2024-09-30 20:23:12

您应该检查该值是否为字典。如果是,请使用嵌套循环将元素添加到每个项的结果中

list2 = []
for key, val in dict1.items():
    if isinstance(val, dict):
        for subkey, subval in val.items():
            list2.append((key, (subkey, subval)))
    else:
        list2.append(key, val)

相关问题 更多 >