返回字典的某些和值

时间:2015-07-19 21:44:33

标签: python python-3.4

基本上这是一个组合程序。它汇总了dict1中的所有值,并返回添加到100的所有键组合。我想得到相同的结果,但我不希望某些键/值在同一个组合组中。即我不希望键'a'在任何具有键'b'的组合组中,键'c'不在任何具有'd'的组合组中等。

import itertools
dict1 = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5, 'f':6, 'g':7, 'f':8}

def matches(d, target):
    # First try single items, then couples, then triplets etc.
    for num in range(1,len(d)+1):
        # Iterate over all possible combinations of length num
        for com in itertools.combinations(d.items(), num):
            # Does the sum of all second items per key/value pair match the target?
            if sum(item[1] for item in com) == target:
                # Yield one item at a time, so the caller can decide when to stop

                yield dict(com).keys()

for match in matches(dict1, 100):
    print(match)

1 个答案:

答案 0 :(得分:0)

主要问题是,程序的逻辑不能以这种形式运行。

sum(item[1] for item in com)的最大值为30,然后循环结束。因此,函数matches不会yield任何事情。