2015-07-19 2 views
1

В основном это комбинационная программа. Он суммирует все значения в dict1 и возвращает все комбинации клавиш, которые добавляют к 100. Я хочу получить тот же результат, но я не хочу, чтобы определенные ключевые/значения были в одной и той же группе комбинаций. то есть я не хочу ключ «а», чтобы быть в любой группе комбинации с ключом «B», ключ «с» не может быть в любой группе комбинации с «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

Работает ли ваш код? Что он делает, что это не должно? Что он не делает, что нужно? Каков ваш вопрос, пожалуйста, будьте конкретны? Пожалуйста, укажите желаемый и фактический вывод для ввода примера. – wwii

ответ

0

Основная проблема заключается в , что логика программы не работает в этой форме.

Максимальный размер sum(item[1] for item in com): 30, затем конец контуров. Таким образом, функция matches не yield ничего.

Смежные вопросы