如何从嵌套字典中提取值?Python嵌套字典取值报错TypeError的排查
问题分析与解决
咱们来拆解下你遇到的错误原因:
你写的列表推导式[item['quantity'] for d_ in data_dict.values() for item in d_]存在两处逻辑问题:
data_dict.values()里第一个元素是parts对应的列表["part1", "part2", "part3", "part4"],当你遍历这个列表时,item是单个字符串(比如"part1"),这时候尝试item['quantity']就会触发TypeError——字符串只能用整数作为索引,不能用字符串。- 就算跳过了列表,当你遍历零件字典(比如
{'price': 3.99, 'quantity': 32})的元素时,item会是'price'、'quantity'这些键,同样是字符串,依然无法用['quantity']索引。
正确的解法有两种,你可以根据需求选择:
解法1:利用已有的parts列表(最直接)
既然data_dict['parts']已经给出了所有零件的名称,直接遍历这些名称去取对应字典的quantity即可:
quantities = [data_dict[part]['quantity'] for part in data_dict['parts']] # 输出结果: [32, 2, 4, 0]
解法2:过滤非字典类型的值(不依赖parts键)
如果不想依赖parts这个键,可以先判断每个值是否是字典,再提取quantity:
quantities = [d['quantity'] for d in data_dict.values() if isinstance(d, dict)] # 输出结果同样是: [32, 2, 4, 0]
内容的提问来源于stack exchange,提问作者Chris McC
相关产品推荐
相关产品推荐

