我如何获得这本字典中可能组合的总和
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': {
# ...
}
希望这就是您要的结果。
我有这样的字典:
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': {
# ...
}
希望这就是您要的结果。