首页 > 解决方案 > 'reset' 字典中剩余的元素有一个值(没有样板化),这可能吗?

问题描述

所以我有以下代码(工作)来计算版本号

#bump version
version = {
    'Major:': old_version[0],
    'Minor:': old_version[1],
    'Patch:': old_version[2],
    }

version[levelstr] = str(int(version[levelstr]) + 1)

new_version_str = version['Major:'] + "." + version['Minor:'] + "." + version['Patch:']

只有我忘记了,例如,如果主要版本增加,次要版本和补丁应该被归零(如果是次要版本,补丁应该被归零)。到目前为止避免使用 if 进行样板化,我宁愿避免使用如下代码(因为这是非常嘈杂和笨拙的方式 - 但会工作):

if levelstr=='Major:':
    version['Minor:'] = '0';
    version['Patch:'] = '0';

所以基本上有一些聪明的方法来做这样的事情:为这个元素右边的元素设置一个值?或者,我可以将字符串转换为索引,然后使用序列代替..?

标签: pythondictionary

解决方案


听起来你想要一个类,Version其中 setter mutate或版本类型实例变量,具体取决于 setter。MajorMinorPatch

或者,你可以看看我在这个网站上发布过的最糟糕的答案:

def increment_version(old_version, key):

    noop = lambda x: x
    incr = lambda x: x+1
    reset = lambda x: 0

    keys = ("Major", "Minor", "Patch")
    operations = (noop, noop, incr, reset, reset)

    yield from map(str, (operations[2 - keys.index(key) + offset](int(char)) for offset, char in enumerate(old_version)))


old_version = "321"
new_version = ".".join(increment_version(old_version, "Major"))

print(new_version)

推荐阅读