在字典中分组 memoized 解决方案

Grouping memoized solutions in a dictionary

我有一个调用了数千次的函数。它根据大约 25 个变量的值区分大约 40 种不同的情况。每个变量有 2 到 10 个可能的值。由于每个值的可能性不是很多,而且我感兴趣的只有 40 个案例,所以我正在考虑让每个答案都是 0 到 9 之间的整数,然后将这些整数组合起来类似于按位运算符。一旦结合起来,它们就可以用作字典的键来检索我正在寻找的类型。有谁知道这个解决方案的现有实现,它叫什么,或者我可以在哪里阅读更多相关信息?我试图用 C++ 或 Python 解决这个问题。这里的动机是避免大量的逻辑语句混淆代码。此外,由于每个变量都是完全独立的,仅使用 if/else and/or switch 语句,我最终不得不多次检查每个变量的每个可能值,因为并非所有不同类型都整齐地分组到共享最多的类别中他们的逻辑。因此,此解决方案可以使代码更易于阅读且更高效。这是我正在尝试做的事情的 Python 示例:

type_dict = {111: 'Type 1',
             112: 'Type 2',
             113: 'Type 3',
             # ...
             537: 'Type 32'} # etc.


answers = []
for each_run in list_of_scenarios:
    # Based on a bunch of logic, determine the value of each variable
    var_a = 5
    var_b = 3
    var_c = 7

    # Combine these variables to one key
    this_key = 100*var_a + 10*var_b + var_c

    answers.append(type_dict[this_key])

在 Python 中,您可以利用元组是有效字典键这一事实:

type_dict = {(1, 1, 1): 'Type 1',
             (1, 1, 2): 'Type 2',
             (1, 1, 3): 'Type 3',
             (5, 3, 7): 'Type 32'}

var_a = 5
var_b = 3
var_c = 7

type_dict[(var_a, var_b, var_c)]

Returns:

'Type 32'