首页 > 解决方案 > 在 for 循环理解中分配默认值以及设置交集

问题描述

我正在尝试理解逻辑为非标准颜色和空字符串分配默认值,但我不知道如何实现这一点

基本上,需要检查 required_color 是否为非标准/预定义颜色,然后将“红色”指定为默认值。

是否有更好的解决方案,而不需要/检查第 17/18 行中的条件,但以某种方式在理解逻辑本身中处理它。

'''

#!/usr/bin/env python3

#testcases:
#a. empty required_color then set "red" as default
#b. if SPECIAL_COLOR then set "green" as default
#c. non-standard color in required_color then set set "red" as default

#required_color variable is comma separated string

required_color = "yellow,orange"
pre_defined_expected_color = "red,blue,green,SPECIAL_COLOR"

#if required_color is empty or non standard color then set required_color to "red" as default
if not required_color or required_color not in pre_defined_expected_color:
    required_color = "red"

for item in set(required_color.split(",")).intersection(set(["red", "blue", "green", "SPECIAL_COLOR"])):
     # if SPECIAL_COLOR color then set item to "green" as default
     if item == "SPECIAL_COLOR":
         item = "green"
     print(item)
     break

'''

标签: pythonpython-3.x

解决方案


使用字典并获取(默认):

required_color = "yellow,orange"
pre_defined_expected_color = "red,blue,green,SPECIAL_COLOR"

colorMap = {c:c for c in required_color.split(",")+pre_defined_expected_color.split(",")}

# remap "SPECIAL_COLOR" to "green"
colorMap ["SPECIAL_COLOR"] = "green"

# the .get not really needed here because you only use keys present in dict
for k in colorMap.keys():
    print(colorMap.get(k))

# if your input may contain non-keys use get:

for k in ["pastel","oblique"]:
    print(colorMap.get(k, "green"))

输出:

yellow
orange
red
blue
green
green   # SPECIAL_COLOR

green   # pastel
green   # oblique

推荐阅读