如何按优先级更新字典列表中的字符串?代码遇KeyError求解决
问题修复:KeyError与输出不符合预期的解决办法
错误原因
- 数据中的
'N/A'未包含在priority_order的键集合中,执行priority_order[v]时触发KeyError。 - 原代码将
main赋值为优先级数值(如4),而非目标颜色字符串(如'Red'),不符合预期输出。
修复方案
方案1:将未知值映射为Undefined
通过dict.get()方法处理不存在的键,将'N/A'这类值的优先级等同于'Undefined',同时修正main的赋值逻辑:
data = [ { 'Pencil': 'Green' }, { 'Pen': 'N/A' }, { 'Scale': 'Red' }, { 'Compass': 'N/A'}] priority_order = {'Red':4, 'Orange':3, 'Yellow':2, 'Green':1, 'Undefined': 0} main = 'Undefined' for each in data: for k, v in each.items(): current_priority = priority_order.get(v, priority_order['Undefined']) if current_priority > priority_order[main]: main = v if v in priority_order else 'Undefined' print(main) # 输出:Red
方案2:直接跳过不在优先级列表中的值
如果不需要处理'N/A'这类值,直接跳过即可:
data = [ { 'Pencil': 'Green' }, { 'Pen': 'N/A' }, { 'Scale': 'Red' }, { 'Compass': 'N/A'}] priority_order = {'Red':4, 'Orange':3, 'Yellow':2, 'Green':1, 'Undefined': 0} main = 'Undefined' for each in data: for k, v in each.items(): if v not in priority_order: continue if priority_order[v] > priority_order[main]: main = v print(main) # 输出:Red
内容的提问来源于stack exchange,提问作者sim
相关产品推荐
相关产品推荐

