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

AWS Python代码执行tmp_str = [{category : name }]报unhashable dict错误

报错原因定位
  • 核心错误1:category变量是table.get_item()的返回值,本身是包含响应元数据和查询结果的字典类型,Python中只有可哈希类型(字符串、数值、元组等)才能作为字典的key,字典本身属于不可哈希类型,直接用category当字典key就会触发"unhashable dict"报错。
  • 核心错误2:{tmp_str}的写法逻辑错误,无论tmp_str是列表还是字典,都属于不可哈希类型,不能作为字典的key;同时代码中json_str变量未提前定义,直接解包会抛出未定义错误。
  • 额外逻辑问题:循环中每次调用table.scan()、table.get_item()会产生极高的DynamoDB调用开销,且item_count是近似值可能导致索引越界,另外循环中重复覆盖json_str1会导致只保留最后一次匹配的结果。
修复后的代码
import json

# 提前定义json_str的初始值,根据实际业务需求调整初始结构
json_str = {}

def isAttributesIntheName(file_name, message, db_client, table_name):
    table = db_client.Table(table_name)
    # 一次全量扫描获取所有条目,避免循环调用scan接口
    items = table.scan()['Items']
    # 提前构造name到category属性值的映射,无需循环调用get_item
    name_category_map = {item['name']: item['category'] for item in items}
    # 初始化结果字典,避免循环覆盖
    json_str1 = json_str.copy()
    
    for name, category_val in name_category_map.items():
        if name.lower() in file_name.lower():
            # 直接用category属性的可哈希值作为key构造字典
            tmp_dict = {category_val: name}
            json_str1.update(tmp_dict)
    
    print(json.dumps(json_str1))
    return json_str1
关键改动说明
  • 调整DynamoDB查询逻辑:一次全表扫描获取所有数据,直接从扫描结果中提取category属性的可哈希值,既解决了原category变量为字典的问题,也大幅降低了接口调用开销。
  • 修正字典构造逻辑:删除错误的{tmp_str}写法,直接构造合法字典调用update方法合并,避免不可哈希类型作为key的问题。
  • 补全变量定义,调整结果赋值逻辑,避免未定义变量报错和循环覆盖导致的结果丢失问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:45:00