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

解析DynamoDB返回结果时遇list indices类型错误求助

问题根源与修复方案

你遇到的list indices must be integers or slices, not str错误,核心出在get_males函数的分页逻辑里,同时还有一处索引使用错误,具体如下:

1. 分页数据添加方式错误

DynamoDB的query接口返回的response['Items']本身是一个包含多个item字典的列表,你用items.append(response['Items'])会把整个列表作为单个元素塞进主列表items中,最终items会变成[item1, item2, [item3, item4], ...]的嵌套结构。后续遍历的时候,当循环到嵌套的列表元素时,valid_male_adult(adult)里的adult是列表,用adult['age']自然会触发“列表不能用字符串当索引”的错误。

修复方式:把items.append(response['Items'])改成items.extend(response['Items']),这样会把分页返回的每个item逐个添加到主列表里,保持items的结构统一为[item1, item2, item3, ...]。

2. 分页查询用错索引名

第一次查询用的是gender-index,但循环里的分页查询写成了state-index,这会导致查询失败——因为你的KeyConditionExpression是基于gender字段的,必须和索引名匹配,分页时要保持使用gender-index。

3. 潜在的索引越界问题

最后一行json.dumps(list_of_adults[1])如果list_of_adults里元素不足2个,会触发索引越界错误,建议先判断列表长度再取值。


修正后的完整代码

def get_males():
    """ Searches all males """   

    response = table.query(
        IndexName='gender-index',
        KeyConditionExpression=Key('gender').eq('Male')
    )
    if response['Count'] > 0:
        items = response['Items']
        # 直接用while循环判断,无需额外的if检查
        while 'LastEvaluatedKey' in response:
            response = table.query(
                ExclusiveStartKey=response['LastEvaluatedKey'],
                IndexName='gender-index',  # 修正为正确的索引名
                KeyConditionExpression=Key('gender').eq('Male')
            )
            items.extend(response['Items'])  # 用extend替代append
        return items
    else:
        logger.info('No males found')
        return []


def valid_male_adult(payload):    
    return payload['age'] > 17 and payload['gender'] == 'Male'


if __name__ == "__main__":
    list_of_adults = []
    adults = get_males()
    for adult in adults:
        if valid_male_adult(adult):
            list_of_adults.append(adult)
    
    # 先判断列表长度,避免索引越界
    if len(list_of_adults) >= 2:
        json.dumps(list_of_adults[1], cls=DecimalEncoder)
    else:
        print("No enough adult males found")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:21:01