如何编写一个有效的“ 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)
查找时间。当然,对于真实数据,您将希望自动构造
alias
和case
映射,但这应该非常简单。更新/删除也应该非常简单,因为它们可以归结为简单的
dict
更新/删除。另外,为使插入新值更容易,您可以使用
UUID4
(或其他随机值)代替数字。关于python - 带有别名的Python switch语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44990080/