gpt4 book ai didi

带有别名的 Python switch 语句

转载 作者:太空宇宙 更新时间:2023-11-04 00:33:36 25 4
gpt4 key购买 nike

如何编写一个高效的“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 成为字典)

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

最佳答案

您可以使用链接 HashMap 方法:

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 switch 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44990080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com