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

Python从字典提取元素加入列表时报TypeError如何解决?

错误原因与修复方案

首先你遇到的TypeError: 'dict' object is not callable报错直接来源于字典访问语法错误:Python中字典取值需要用方括号[],你写的rooms(current_room['item'])用了小括号,会被解释为调用名为rooms的函数,但rooms是字典类型,因此触发报错。

除此之外你的代码还有多处逻辑错误,全部问题整理如下:

  • current_room被定义为列表['Cabin A'],但后续直接用字符串作为键取值current_room['item'],列表不支持字符串索引
  • 判断'item' in current_room逻辑错误:你要判断的是当前房间对应的属性字典中是否存在item字段,不是判断房间名字符串里是否包含item子串
  • 物品添加逻辑错误:你需要添加到背包的是当前房间的物品值,不是rooms字典的元素
  • 删除逻辑错误:你写的del rooms[current_room['item']]会尝试删除rooms字典的顶级键,正确需求是删除当前房间属性字典里的item相关字段
  • rooms[current_room].update是无效代码,update是字典方法,你没有传入参数也没有加调用括号,没有实际作用

修正后代码示例

# 定义房间字典(和你原来的保持一致)
rooms = {
    'Cabin A': {'name': 'Cabin A', 'go starboard': 'Stern', 'item': 'Spearhead', 'item name': 'a Spearhead'}, 
    'Cabin B': {'name': 'Cabin B', 'go port': 'Hull', 'item': 'Spear Gun', 'item name': 'a Spear Gun'}
}

current_room = 'Cabin A' # 改成字符串类型存储当前房间名
inventory = []
get_items = ['get', 'pick up'] # 假设你的get_items是拾取指令集合,这里补充示例
command = 'get' # 示例指令

if command in get_items:
    # 先取当前房间的属性字典
    room_data = rooms[current_room]
    if 'item' in room_data:
        # 把物品名加入背包
        inventory.append(room_data['item name'])
        # 从当前房间删除物品相关字段
        del room_data['item']
        del room_data['item name']
        print(inventory)
    else:
        print('Nothing here.')

运行上述代码后输出为['a Spearhead'],再次查看rooms['Cabin A']会发现item和item name字段已经被移除,符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:30:00