Python如何按字典的颜色值将对应键追加到专属列表?
按字典值拆分键到对应颜色列表的实现
原有代码的核心问题
- 遍历逻辑错位:直接遍历字典对象时,拿到的循环值是字典的键(也就是1000、2000这类数字),根本没有拿到键对应的颜色值
- 判断逻辑错位:判断条件直接拿整个字典对象
color_name和字符串'brown'做相等比较,完全没有匹配到对应键的颜色值 - 语法规则错误:
if判断语句缺少行尾的冒号;列表的append是方法,调用时需要用英文括号包裹要追加的内容,原写法既缺括号,还错误地把整个字典作为要追加的内容
固定三类颜色场景的实现
你已经明确字典的取值只有brown、yellow、blue三种,直接通过分支判断将键追加到对应列表即可,逻辑完全匹配你的预期:
# 提前初始化三个空列表 brown_list = [] yellow_list = [] blue_list = [] # 遍历字典的键值对,拆分出数字键、颜色值两个独立的循环变量 for numeric_key, color_value in color_name.items(): if color_value == 'brown': brown_list.append(numeric_key) elif color_value == 'yellow': yellow_list.append(numeric_key) elif color_value == 'blue': blue_list.append(numeric_key)
用你给出的示例字典{1000: 'brown', 4000: 'yellow', 2000: 'yellow', 3000: 'blue'}测试,运行结果为:
brown_list = [1000] yellow_list = [4000, 2000] blue_list = [3000]
无论原始字典的数据量多大,这套逻辑都可以正常稳定运行。
可扩展的通用实现
如果后续可能新增其他颜色,不需要反复新增elif分支判断,可以借助collections模块的defaultdict实现自动归类,后续新增颜色时不需要修改核心遍历逻辑,维护成本更低:
from collections import defaultdict # 初始化归类容器,每个颜色键对应的值默认是一个空列表 color_group = defaultdict(list) for numeric_key, color_value in color_name.items(): color_group[color_value].append(numeric_key) # 直接按颜色名取出对应列表即可 brown_list = color_group['brown'] yellow_list = color_group['yellow'] blue_list = color_group['blue']
内容的提问来源于stack exchange,提问作者badatcode
相关产品推荐
相关产品推荐

