如何从字典列表提取指定元素?解决KeyError报错问题
如何从存储字典的变量中提取指定字典?
我在变量bookR中存储了一组字典数据:
{'User-ID': '2345667', 'ISBN': '265838929355X', 'Rating': '0'} {'User-ID': '2345635', 'ISBN': '3456477588844', 'Rating': '5'} {'User-ID': '2345632', 'ISBN': '9890876776388', 'Rating': '4'} {'User-ID': '2767888', 'ISBN': '2234566663200', 'Rating': '7'}
我想要提取其中两个字典分别存入userA和userB,预期结果:
print(userA) # output: {'User-ID': '2345667', 'ISBN': '265838929355X', 'Rating': '0'} print(userB) # output:{'User-ID': '2767888', 'ISBN': '2234566663200', 'Rating': '7'}
但使用以下代码时出现KeyError错误:
print(bookR) userA = bookR[1] userB = bookR[4] print(userA) print(userB)
解决方案
问题核心
出现KeyError的原因是**bookR并非列表类型**:如果直接把多个字典无结构地写在一起,Python只会识别最后一个字典,此时用数字索引访问会被当成字典的键来解析,自然找不到对应键而报错。
正确实现步骤
修正
bookR的存储结构
必须将所有字典放入列表中,这样才能通过索引访问元素:bookR = [ {'User-ID': '2345667', 'ISBN': '265838929355X', 'Rating': '0'}, {'User-ID': '2345635', 'ISBN': '3456477588844', 'Rating': '5'}, {'User-ID': '2345632', 'ISBN': '9890876776388', 'Rating': '4'}, {'User-ID': '2767888', 'ISBN': '2234566663200', 'Rating': '7'} ]通过索引提取目标字典
Python列表索引从0开始,所以第一个字典对应索引0,最后一个对应索引3:userA = bookR[0] userB = bookR[3] print(userA) # 输出: {'User-ID': '2345667', 'ISBN': '265838929355X', 'Rating': '0'} print(userB) # 输出: {'User-ID': '2767888', 'ISBN': '2234566663200', 'Rating': '7'}
特殊情况处理(如果数据是字符串格式)
如果bookR是从文件或其他来源读取的字符串格式数据,需要先转换为列表字典:
import ast # 假设原始数据为字符串 bookR_str = """ {'User-ID': '2345667', 'ISBN': '265838929355X', 'Rating': '0'} {'User-ID': '2345635', 'ISBN': '3456477588844', 'Rating': '5'} {'User-ID': '2345632', 'ISBN': '9890876776388', 'Rating': '4'} {'User-ID': '2767888', 'ISBN': '2234566663200', 'Rating': '7'} """ # 分割字符串并转换为字典列表 bookR = [ast.literal_eval(line.strip()) for line in bookR_str.split('\n') if line.strip()]
内容的提问来源于stack exchange,提问作者Seun Akin
相关产品推荐
相关产品推荐

