2015-08-06 2 views
2

У меня есть словарь dict, который имеет два значения для каждого ключа, например:Перебор словаря Элементов в Python для выполнения множества вычислений

dict = {} 
dict[name] = x1, x2 

Давайте предположим, что этот словарь имеет 10 элементов в нем. Я хотел бы перебирать ключи словаря таким образом, что выполняю вычисление для каждого значения ключа, заданного относительно других наборов значений ключей в словаре. Например, я хотел бы начать с первого ключа и вычислить что-то вроде x1_0 + x2_0 - x1_1 + x2_1, где «_0» обозначает значения первого ключа, а «_1» обозначает значения, связанные с любыми значениями другого ключа. Этот расчет будет выполняться девять раз по отношению ко всем остальным девяти клавишам. Затем я перейду ко второму набору ключей и выполню вычисления по отношению к девяти оставшимся клавишам и так далее.

Я пробовал делать это с двумя словарями, содержащими одни и те же данные, но не увенчались успехом. Обратите внимание, что я уже выполнил преобразование float для значений, так что это не проблема. Вот что я пробовал:

for (name_0, (x1_0, x2_0)), (name_1, (x1_1, x2_1)) in zip(dict.iteritems(), dict2.iteritems()): 
    if name_0 != name_1: 
     d = x1_0 + x2_0 - x1_1 + x2_1 
    print d 
+3

Нет * первого ключа *, dicts неупорядочены –

+1

См. Http://stackoverflow.com/questions/4326658/python-index-a-dictionary – aldux

ответ

0

Я закончил с использованием индексации при инициализации для цикла, и это работает очень хорошо:

for (dict.keys()[i], dict.values()[i]), (dict2.keys()[j], dict2.values()[j]) in zip(dict.iteritems(), dict2.iteritems()): 
1

Если мое понимание верное, вы намереваетесь выполнить перестановку каждого из куплетов. С результирующей пары куплет, вы намерены выполнить некоторые одноранговой расчет

Пусть один из пары P я быть (X я, X J), где X я является двустишие (X i0, X i1), то препарат может быть выражен как

def calc(x): 
    return x[0][0] + x[0][1] - x[1][0] + x[1][1] 

Для создания парной перестановки, вы можете использовать itertools.permutation следующий

permutations(_dict.values(), 2) 

Теперь вам просто нужно сопоставить пару куплет с сформулированной функции

map(calc, permutations(d.values(), 2)) 
Смежные вопросы