Python中键不固定的字典列表按指定键提取值出现KeyError如何解决
问题原因
出现KeyError是因为你的列表中部分字典不存在c键(示例数据里倒数两个字典就没有该键),直接通过d['c']访问不存在的键就会触发该异常。
解决方案
根据你的使用需求,可以选择以下两种方案:
- 方案1:保留所有条目,缺失的
c键填充默认值
使用字典内置的get()方法,第二个参数为键不存在时返回的默认值,比如可以设置为空列表[]、None等:
# 缺失c键时默认返回空列表 [(d['t'], d['p'], d['s'], d.get('c', [])) for d in data]
运行后输出结果如下:
[(1633098324445950024, 139.55, 15, [14, 37, 41]), (1633098324445958000, 139.55, 100, [14, 41]), (1633098324445958498, 139.55, 60, [14, 37, 41]), (1633098324446013523, 139.55, 52, [14, 37, 41]), (1633098324472392943, 139.555, 100, []), (1633098324478972256, 139.555, 100, [])]
如果t、p、s这几个键也有可能缺失,所有取值都可以用get()方法处理,比如d.get('t', 0)。
- 方案2:仅保留同时包含所有需要提取键的条目
在列表推导式中添加筛选条件,过滤掉缺少目标键的字典:
target_keys = ['t', 'p', 's', 'c'] [(d['t'], d['p'], d['s'], d['c']) for d in data if all(k in d for k in target_keys)]
运行后会自动过滤掉没有c键的最后两条数据,输出结果如下:
[(1633098324445950024, 139.55, 15, [14, 37, 41]), (1633098324445958000, 139.55, 100, [14, 41]), (1633098324445958498, 139.55, 60, [14, 37, 41]), (1633098324446013523, 139.55, 52, [14, 37, 41])]
内容的提问来源于stack exchange,提问作者Bob
相关产品推荐
相关产品推荐

