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

列表转字典触发TypeError错误,求正确实现方案

解决字典推导式中的TypeError问题

你遇到的TypeError: 'NoneType' object is not subscriptable错误,本质是字典推导式里存在None元素,尝试对None执行["id"]索引操作导致的。以下是几种正确的处理方式:

1. 先过滤None元素

如果数据列表里混有None,直接在推导式里添加过滤条件,只处理非None的条目:

# 假设原数据是json_data列表
item_dict = {dd["id"]: dd for dd in json_data if dd is not None}

2. 同时校验id键是否存在

如果部分非None的条目里没有"id"键,还需要加上键存在的判断,避免KeyError:

item_dict = {dd["id"]: dd for dd in json_data if dd is not None and "id" in dd}

3. 灵活处理无id的条目

如果需要保留那些没有id的条目,可以用循环替代推导式,自定义处理逻辑:

item_dict = {}
for dd in json_data:
    if dd is None:
        continue
    # 尝试获取id,不存在则用其他字段(比如name)作为键,或者跳过
    item_id = dd.get("id")
    if not item_id:
        item_id = dd.get("name")
        if not item_id:
            continue
    item_dict[item_id] = dd

举个实际例子,假设你的json_data结构如下:

json_data = [
    {"id": 1001, "name": "霜之哀伤"},
    None,
    {"name": "灰烬使者"},  # 无id字段
    {"id": 1002, "name": "雷霆之怒"}
]

用第二种推导式会得到:

{1001: {"id": 1001, "name": "霜之哀伤"}, 1002: {"id": 1002, "name": "雷霆之怒"}}

用第三种循环处理则会保留"灰烬使者"条目,以name作为键。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 00:52:39