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
相关产品推荐
相关产品推荐

