列表转字典触发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
相关产品推荐
相关产品推荐

