如何编写一个有效的“ switch”语句,该语句可以为不同的输入返回相同的内容?
可以使用以下字典来实现Python中的简单切换:

def switch(s):
    case = {'phone': '123 456 789', 'website': 'www.example.com'}
    return case[s]


这个具有恒定的访问时间,但是我想使用别名,即switch('website')将返回与switch('site')等相同的东西,而不重复值,即不使用
case = {'website': 'www.example.com, 'site': 'www.example.com}
可以使用的是:

def switch(s):
    case = {('telephone', 'number', 'phone'): '123 456 789',
            ('website', 'site'): 'www.example.com'}
    for key, value in case.items():
        if s in key:
            return value


但是这种方法比线性访问时间差。
可以通过使用

def switch(s):
    case = ['123 456 789', 'www.example.com']
    aliases = {'telephone': 0, 'number': 0, 'phone': 0,
               'website': 1, 'site': 1}
    return case[aliases[s]]


但是然后我有点重复值,以防万一我决定删除任何答案,我必须编辑aliases和/或case的返回值(如果我不再想返回'123 456 789'必须将其从case删除并修改aliases,以便aliases['website']aliases['site']返回0或在case的第一个单元格中保留伪值,或者将case用作字典)

有没有更好的方法来编写这样的语句?

最佳答案

您可以使用链接的哈希图方法:

def switch(s):
    alias = {'telephone': 1, 'number': 1, 'phone': 1,
             'website': 2, 'site': 2}
    case = {1: '123 456 789', 2: 'www.example.com'}
    return case[alias[s]]


这样,您就可以保留O(1)查找时间。

当然,对于真实数据,您将希望自动构造aliascase映射,但这应该非常简单。

更新/删除也应该非常简单,因为它们可以归结为简单的dict更新/删除。

另外,为使插入新值更容易,您可以使用UUID4(或其他随机值)代替数字。

关于python - 带有别名的Python switch语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44990080/

10-16 02:37