访问列表中嵌套字典的子键:解决TypeError并生成指定列表
问题分析与解决
错误原因
你触发的TypeError: string indices must be integers,本质是遍历myList时,某个元素的keyA对应的值不是字典,而是字符串。虽然你单独访问myList[0]["keyA"]["key1"]正常,但列表里可能存在其他元素,其keyA是字符串类型,这时候用['key1']去索引字符串就会报错(字符串只能用整数索引位置)。
另外,你的代码里取的是keyA['key1'],但需求是要valueA2_*(对应keyA['key2']),这也是需求与代码不匹配的问题。
正确代码
如果myList所有元素的结构都和你给出的示例一致(keyA都是嵌套字典),直接用下面的列表推导式就能得到目标结果:
outputlist = [f"{x['keyA']['key2']} - {x['keyB']}" for x in myList]
或者用传统字符串拼接:
outputlist = [x['keyA']['key2'] + " - " + x['keyB'] for x in myList]
容错处理(避免报错)
如果不确定myList里所有元素格式都合规,可以添加类型判断,跳过无效元素并提示:
outputlist = [] for item in myList: keyA_data = item.get('keyA') # 检查keyA是字典,且包含key2,同时元素有keyB if isinstance(keyA_data, dict) and 'key2' in keyA_data and 'keyB' in item: outputlist.append(f"{keyA_data['key2']} - {item['keyB']}") else: print(f"无效元素,已跳过:{item}")
排查问题元素
可以先遍历myList,找出格式异常的元素:
for index, item in enumerate(myList): if not isinstance(item.get('keyA'), dict): print(f"第{index}个元素的keyA不是字典:{item['keyA']}")
内容的提问来源于stack exchange,提问作者Odyseus_v4
相关产品推荐
相关产品推荐

