Python:字典的键/值对的子集决定要调用的函数



我不知道如何在标题中用一句话来最好地描述我的问题,所以下面是解释:

我有一个websocket连接,并从它得到数据。数据为json格式的字符串。例如,有3个键/值对:

data = json.loads('{"k1":"id1_a","k2":"id2_a","k3":"value"}')

现在我想调用不同的k1k2组合相应的不同的函数。

我的方法如下:我定义了一个配置文件(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()
[...]

现在有两个问题:

  1. 如何"映射"?组合到一个特定的功能,而不使用一个大的if elif [...]块?据我所知,python中没有开关函数。
  2. 或者有一个完全不同的,更好的解决方案?

没有一个开关函数,但是您可以在字典中定义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()

相关内容

  • 没有找到相关文章

最新更新