是否可以拆分字典并对值进行分组,然后使用相应的键返回每个组?

时间:2016-06-06 19:52:41

标签: python list dictionary

如果我有一本字典{A:12,B:3,C:14,D:15,E:21,F:9,G:16}以及一个接受列表并根据if组编号的功能他们添加到30.我希望我的输出是与该组对应的键的列表: [A,B,D] [C,G] [E,F](这些键的所有值加起来为30)

到目前为止,我已经将字典分成两个列表,然后在函数之后将它们拉回来,但是我丢失了订单,一切都散了。

1 个答案:

答案 0 :(得分:0)

当然,StackOverflow不是代码编写服务,但是由于你遇到的有趣问题,我会例外。

我会针对不同的r值多次使用itertools.combinations()来获取所有可能长度的组合。然后,如果总和为30,我会对这些值求和并收集结果:

from itertools import combinations

d = {'A':12, 'B':3, 'C':14, 'D':15, 'E':21, 'F':9, 'G':16}

result = []
for l in range(2, len(d)):
    for x in combinations(d.items(), l):
        keys = []
        sum_values = 0

        for key, value in x:
            keys.append(key)
            sum_values += value

        if sum_values == 30:
            result.append(keys)

print(result)

打印:

[['F', 'E'], ['C', 'G'], ['A', 'B', 'D']]