有条件修改多个变量

问题描述 投票:1回答:2

不太清楚正确的标题应该是什么。

我有2个输入def color_matching(color_old, color_new)的功能。这个函数应该检查字符串两个参数并分配任意一个新的字符串,如果有一个打击。

def color_matching(color_old, color_new):
    if ('<color: none' in color_old):
            color_old = "NoHighlightColor"
    elif ('<color: none' in color_new):
            color_new = "NoHighlightColor"

等等。的问题是,每个参数可以匹配14 1的不同的类别(“NoHighlightColor”是其中之一)。我敢肯定有更好的方法来做到这一点不是重复的if语句28次,每次映射,但我画一个空白。

python
2个回答
1
投票

您可以在第一解析您的输入参数,例如,如果是这样的事情: old_color='<color: none attr:ham>' 你可以解析它来获得你所需要的相关属性的唯一值: _old_color=old_color.split(':')[1].split()[0] 这样_old_color='none'

然后你可以使用一本字典,其中{'none':'NoHighlightColor'},让我们把它叫做colors_dict old_color=colors_dict.get(_old_color, old_color)

如果_old_color存在在词典中old_color一个键会拿到钥匙的价值通过这种方式,否则,old_color将保持不变

因此,最终的代码应该类似于此:

def color_matching(color_old, color_new):
    """ Assuming you've predefined colros_dict """
    # Parsing to get both colors
    _old_color=old_color.split(':')[1].split()[0]
    _new_color=new_color.split(':')[1].split()[0]
    # Checking if the first one is a hit
    _result_color = colors_dict.get(_old_color, None)
    # If it was a hit (not None) then assign it to the first argument
    if _result_color:
            color_old = _result_color
    else:
        color_new = colors_dict.get(_color_new, color_new)

0
投票

你可以替换的数据结构条件语句:

def match(color):
    matches = {'<color: none': 'NoHighlightColor', ... }
    for substring, ret in matches.iteritems():
        if substring in color:
            return ret

但你似乎有需要要尝试识别格式正确的解析器问题。

你可能会从建立像"<color:none jaja:a>".split(':')简单的字符串操作的一个

也许你可以砍一个具有巨大的正则表达式。

或者使用像this one图书馆产生了强大的解析器

© www.soinside.com 2019 - 2024. All rights reserved.