我如何获得这本字典中可能组合的总和

How do I get the sum of the possible combinations in this dictionary

我有这样的字典:

D1 = {'u1': {'a1': 2, 'a2': 3, 'a3': 1, 'a4': 2, 'a5': 0, 'a6': 0}, 'u2': {'a1': 1, 'a2': 9, 'a3': 0, 'a4': 3, 'a5': 1, 'a6': 2}, 'u3': {'a1': 0, 'a2': 0, 'a3': 0, 'a4': 0, 'a5': 0, 'a6': 9}, 'u4': {'a1': 10, 'a2': 0, 'a3': 0, 'a4': 4, 'a5': 7, 'a6': 1}}

我想获得 a 的所有可能组合,以及以这种方式附加的该组合的总和。

例如如果我给出 4 a 的排列则

{'u1': {('a1', 'a2', 'a3', 'a6'): 6.0,('a1', 'a2', 'a3', 'a4'): 8.0,('a2', 'a4', 'a5', 'a6'): 5.0,...} 'u2':{ ('a2', 'a4', 'a5', 'a6'): 15.0, ...} and so on}

如果有任何解释或想法,我将不胜感激!谢谢

这是我目前的代码,我知道这是一个笨拙的代码

final_dict = dict()
u_agroup_dict = dict()
for m, t in D1.items():
   comb = list(combinations(D1[m], 3))
      for i in comb:
        sum = 0
        for j in i:
           sum += t[j]
        final_dict[i] = sums
      u_agroup_dict[m]  = final_dict
   print(u_agroup_dict)

我会用 itertools.combinations() 和几个 for 循环来解决这个问题。

import itertools

D1 = {
    'u1': {'a1': 2, 'a2': 3, 'a3': 1, 'a4': 2, 'a5': 0, 'a6': 0},
    'u2': {'a1': 1, 'a2': 9, 'a3': 0, 'a4': 3, 'a5': 1, 'a6': 2},
    'u3': {'a1': 0, 'a2': 0, 'a3': 0, 'a4': 0, 'a5': 0, 'a6': 9},
    'u4': {'a1': 10, 'a2': 0, 'a3': 0, 'a4': 4, 'a5': 7, 'a6': 1}
}

results = {}

for key, value in D1.items():
    ## -----------------
    ## ensure we have a valid sub-dictionary for this key
    ## -----------------
    this_result = results.setdefault(key, {})
    ## -----------------

    ## -----------------
    ## iterate over the combinations of 4
    ## -----------------
    for sub_key in itertools.combinations(value.keys(), 4):
        sub_key_tuple = tuple(sub_key) ## lists can't be indexes but tuples can
        total = sum(value[t] for t in sub_key)
        this_result.setdefault(sub_key_tuple, total)
    ## -----------------

print(results)

给予:

{
    'u1': {
        ('a1', 'a2', 'a3', 'a4'): 8,
        ('a1', 'a2', 'a3', 'a5'): 6,
        ('a1', 'a2', 'a3', 'a6'): 6,
        ('a1', 'a2', 'a4', 'a5'): 7,
        ('a1', 'a2', 'a4', 'a6'): 7,
        ('a1', 'a2', 'a5', 'a6'): 5,
        ('a1', 'a3', 'a4', 'a5'): 5,
        ('a1', 'a3', 'a4', 'a6'): 5,
        ('a1', 'a3', 'a5', 'a6'): 3,
        ('a1', 'a4', 'a5', 'a6'): 4,
        ('a2', 'a3', 'a4', 'a5'): 6,
        ('a2', 'a3', 'a4', 'a6'): 6,
        ('a2', 'a3', 'a5', 'a6'): 4,
        ('a2', 'a4', 'a5', 'a6'): 5,
        ('a3', 'a4', 'a5', 'a6'): 3},
    'u2': {
        # ...
    },
    'u3': {
        # ...
    },
    'u4': {
        # ...
    }

希望这就是您要的结果。