You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python3的Boto3向AWS DynamoDB插入Map列表报TypeError问题

错误原因

报错TypeError: string indices must be integers触发在member['id']执行行,核心原因是当前循环得到的member为字符串类型,而非你预期的字典结构:Python中字符串仅支持整数下标访问,使用字符串作为索引就会触发该类错误。
常见触发场景:

  • 你赋值给team的变量本身是JSON字符串而非列表,遍历字符串时每次取到的member是单个字符的字符串
  • team确实是列表,但列表内的元素是序列化后的JSON字符串,没有提前反序列化为字典
  • 上游传入的team数据结构不符合预期,你错误将上层的字符串字段赋值给了team变量

修复方案

  1. 先排查team的数据类型,在循环前加调试代码确认值和类型:
print(type(team), team)

如果输出类型为<class 'str'>,先通过json库反序列化字符串为Python对象:

import json
team = json.loads(team)
  1. 如果team是列表但元素为JSON字符串,遍历每个元素时先反序列化再操作:
teamMembers = []
for member_str in team:
    member = json.loads(member_str)
    teamMembers.append({'M' : {        
        'id' : {'S' : member['id']},
        'role' : {'S' : member['role']},
        'name' : {'S' : member['name']}
    }})
  1. 可选优化:可以使用Boto3的Resource级DynamoDB客户端,不需要手动指定DynamoDB原生字段类型(S/M/L等标识),会自动完成Python类型到DynamoDB类型的转换,代码更简洁:
import boto3
import json

# 初始化Resource级客户端
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('projects')

# 直接使用Python原生数据结构操作
teamMembers = []
for member in team:
    teamMembers.append({
        'id': member['id'],
        'role': member['role'],
        'name': member['name']
    })

project = {
    'id': data['project']['id'],
    'name': data['project']['name'],
    'team': teamMembers
}

table.put_item(Item=project)

内容的提问来源于stack exchange,提问作者Devin Ceartas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 22:27:02