我不知道如何在标题中用一句话来最好地描述我的问题,所以下面是解释:
我有一个websocket连接,并从它得到数据。数据为json格式的字符串。例如,有3个键/值对:
data = json.loads('{"k1":"id1_a","k2":"id2_a","k3":"value"}')
现在我想调用不同的k1
和k2
组合相应的不同的函数。
我的方法如下:我定义了一个配置文件(yaml):
combination_a:
k1: "id1_a"
k2: "id2_a"
combination_b:
k1: "id1_b"
k2: "id2_b"
[...]
然后我可以导入配置文件作为字典,并做以下操作:
import yaml
config = yaml.safe_load(open("config.yml"))
if config["combination_a"].items() <= data.items():
function_a()
elif config["combination_b"].items() <= data.items():
function_b()
[...]
现在有两个问题:
- 如何"映射"?组合到一个特定的功能,而不使用一个大的
if elif [...]
块?据我所知,python中没有开关函数。 或者有一个完全不同的,更好的解决方案?
没有一个开关函数,但是您可以在字典中定义combination->function
映射并遍历该映射以检查适用的情况。
如果效率很重要,您甚至可以在字典中找到相关的键,以获得更快的查找时间。
基本版本:
combination_function_map = {
'combination_a': function_a,
'combination_b': function_b
}
for key, func in combination_function_map.items():
if config[key].items() <= data.items():
func()