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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 20:12:39