Python中如何根据字典对应值转换列表元素
问题原因
你的列表推导式完全写错了语法顺序,这是触发NameError的直接原因。
Python列表推导式的固定结构是:[最终要存入列表的元素值 for 临时迭代变量 in 你要遍历的可迭代对象]
你之前的两种写法都把三个部分的顺序、含义搞混了,在临时迭代变量color还没被定义的时候就提前用它去字典里取值,Python自然识别不到这个变量。
正确实现代码
直接运行下面的代码就能得到你要的结果:
colors = ['Red', 'White', 'Green', 'Red'] color_dict = {'Red': 0, 'White': 1, 'Green': 2} converted_colors = [color_dict[color] for color in colors]
执行后converted_colors的值就是你预期的[0, 1, 2, 0]。
写法说明
- 遍历的可迭代对象是你存原始颜色字符串的
colors列表,所以for后面的迭代部分写for color in colors,这里的color是每次循环从colors里拿到的单个颜色字符串,比如第一次循环是'Red',第二次是'White'。 - 每次循环要存入新列表的不是
color本身,而是color在字典里对应的映射值,所以元素表达式的位置写color_dict[color]。
额外注意
如果后续你的原始colors列表里可能出现color_dict中不存在的键,上面的写法会抛出KeyError,可以用字典的get方法设置默认值避免报错,比如:
# 不存在的颜色默认映射为-1,可按需修改默认值 converted_colors = [color_dict.get(color, -1) for color in colors]
内容的提问来源于stack exchange,提问作者user2382321
相关产品推荐
相关产品推荐

