Python字典访问报错TypeError:原方案失效原因及最小修复方法
问题分析与修复:字典元素访问的TypeError错误
失效原因
你遇到的TypeError本质是返回值类型不匹配:
函数T()里的字典推导式{fen: (data['to_end'], data['type']) for fen, data in AS.items() if data['to_end'] is not True},把每个键对应的嵌套字典转换成了元组(data['to_end'], data['type'])。
后续代码中AS[s]['used']试图用字符串'used'索引元组,但元组仅支持整数或切片作为索引,因此触发类型错误。
最小改动修复
要保留'used'字段的访问能力,只需让T()返回的字典值仍为包含'used'的嵌套字典,以下是两种最小改动方案:
方案1:保留原字典的所有字段(推荐)
直接过滤原字典中符合条件的项,不修改值的结构:
def T(): AS = {"fen": {'used': 0, 'to_end': None, 'depth': 1, 'type': 'normal'}} # 仅过滤符合条件的项,保留原嵌套字典结构 return {fen: data for fen, data in AS.items() if data['to_end'] is not True} s = "fen" AS = T() if s in AS and AS[s]['used'] == 0: print(AS)
方案2:仅保留需要的字段
如果不需要原字典的depth等其他字段,可以手动构造包含'used'的新字典:
def T(): AS = {"fen": {'used': 0, 'to_end': None, 'depth': 1, 'type': 'normal'}} return { fen: { 'used': data['used'], 'to_end': data['to_end'], 'type': data['type'] } for fen, data in AS.items() if data['to_end'] is not True } s = "fen" AS = T() if s in AS and AS[s]['used'] == 0: print(AS)
两种方案都能让AS[s]保持字典类型,从而正常通过['used']索引取值。
内容的提问来源于stack exchange,提问作者user1642683
相关产品推荐
相关产品推荐

