簡體   English   中英

Python:字典的鍵/值對子集確定要調用的 function

[英]Python: subset of key/value pairs of a dict determines the function to call

我不知道如何用標題中的一句話來最好地描述我的問題,所以這里解釋一下:

我有一個 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"
[...]

然后我可以將配置文件導入為 dict 並執行以下操作:

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 [...]塊的情況下將組合“映射”到特定的 function? 據我所知,python中沒有開關function?
  2. 還是有完全不同的更好的解決方案?

沒有開關 function afaik,但是您可以在字典中定義combination->function映射並對其進行迭代以檢查哪種情況適用。

如果效率很重要,您甚至可以在 dict 中找到相關鍵以獲得更快的查找時間。

這是基本版本:

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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM