嵌套字典扁平化输出为元组列表时触发AttributeError问题求助
问题原因
你之前的写法未对字典值的类型做判断,统一调用items()方法,布尔、字符串等非字典类型没有该属性,因此触发AttributeError。
可行实现方案
1. 易读的循环实现
dict1 = { 'conf1' : {'subconf11' : True, 'subconf12' : False}, 'conf2' : False, 'conf3' : {'subconf31' : True, 'subconf32' : False, 'subconf33' : False}, 'conf4' : 'On' } list1 = [] for primary_key, primary_val in dict1.items(): # 判断当前值是否为字典类型 if isinstance(primary_val, dict): # 遍历子字典的键值对,组装对应元组 for sub_key, sub_val in primary_val.items(): list1.append((primary_key, (sub_key, sub_val))) else: # 非字典类型直接组装元组 list1.append((primary_key, primary_val)) print(list1)
输出完全匹配预期:
[('conf1', ('subconf11', True)), ('conf1', ('subconf12', False)), ('conf2', False), ('conf3', ('subconf31', True)), ('conf3', ('subconf32', False)), ('conf3', ('subconf33', False)), ('conf4', 'On')]
2. 简洁的列表推导式实现
list1 = [entry for key, val in dict1.items() for entry in ([(key, (k, v)) for k, v in val.items()] if isinstance(val, dict) else [(key, val)])]
内容的提问来源于stack exchange,提问作者dig_123
相关产品推荐
相关产品推荐

