使用列表推导式提取字典值时触发TypeError: string indices must be integers
问题原因与解决
报错根源
你写的列表推导式:
ids_batch = [x['acn_num_ACN'] for x in meta_batch]
触发TypeError的核心原因是:Python中直接遍历字典时,默认迭代的是字典的键,而非键值对或值。
你的meta_batch是一个字典,遍历它时,变量x会依次取到两个字符串:'acn_num_ACN'和'Time_Date'。当你尝试对字符串x执行x['acn_num_ACN']时,Python会把'acn_num_ACN'当成索引来处理,但字符串的索引只能是整数(比如x[0]取第一个字符),自然就会报错。
正确的取值方式
你已经知道直接用meta_batch['acn_num_ACN']就能拿到目标列表,这本身就是最直接高效的写法——因为你明确知道要取哪个键的值,完全不需要用列表推导式绕弯子。
如果非要用列表推导式(比如某些特殊场景需要处理值中的元素),应该直接遍历目标键对应的列表:
ids_batch = [num for num in meta_batch['acn_num_ACN']]
不过这个写法和直接取meta_batch['acn_num_ACN']效果完全一致,没必要多此一举。
内容的提问来源于stack exchange,提问作者Jon
相关产品推荐
相关产品推荐

