Python从嵌套字典提取指定值生成元组时遇类型错误
解决嵌套字典提取valueDX元素的错误问题
给定如下嵌套字典:
structure = { 'key1' : {'keyA' : 'valueA1', 'keyB' : {'keyC' : 'valueC1', 'keyD': 'valueD1'}}, 'key2' : {'keyA' : 'valueA2', 'keyB' : {'keyC' : 'valueC2', 'keyD': 'valueD2'}}, 'key3' : {'keyA' : 'valueA3', 'keyB' : {'keyC' : 'valueC3', 'keyD': 'valueD3'}} }
需要提取所有valueD1、valueD2、valueD3元素组成元组,但你写的代码触发了TypeError: 'dict_keys' object is not subscriptable错误,下面是问题原因和解决办法:
错误原因
你写的x['keyB'].values()是获取keyB对应字典的所有值,返回的是dict_values对象——这是一个值的集合视图,不是字典本身,自然不能用['keyD']这种下标方式访问。你要的是keyB字典里keyD对应的具体值,直接通过键访问就行,完全不需要调用.values()。
正确实现
方式一:修正原循环代码
my_list = [] for x in structure.values(): # 直接从keyB字典中取keyD对应的值 my_list.append(x['keyB']['keyD']) # 把列表转成元组 result = tuple(my_list) print(result) # 输出:('valueD1', 'valueD2', 'valueD3')
方式二:用列表推导式简化代码
如果想更简洁,一步到位生成元组:
result = tuple(x['keyB']['keyD'] for x in structure.values()) print(result) # 输出:('valueD1', 'valueD2', 'valueD3')
内容的提问来源于stack exchange,提问作者beatle
相关产品推荐
相关产品推荐

