2015-04-08 2 views
-1

поэтому у меня есть 2 словаря в словарях. Мне нужно добавить значения 2 внутренних словарей на основе ключей внешних словарей. .Python - добавление значений словаря в словаре на основе тех же ключей

Dict1 = {A:{1:10,2:20},B:{1:15,2:30},C:{1:2,2:12},D:{1:15,2:40}} 
Dict2 = {A:{1:30,2:10},B:{1:10,2:20},C:{1:30,2:20},E:{1:5,2:10}} 

Итак, я должен добавить значения 1s из Dict1 в значения от 2s до Dict2. например, для ключа A из обоих словарей, добавляющих значения 1s из Dict1 и 2s формы Dict2: 10 + 10 = 20 и наоборот, т.е. 2s Dict1 + 1s из Dict 2: 20 +30 = 50 и создать новый словарь: {A: {до: 20, вниз = 50}}

Так желаемый результат будет:

Final_dict = {A:{up:20,down:50},B:{up:35,down:40},c:{up:22,down:42},D:{up:15,down:40},E:{up:10,down:5}} 

Или просто создать отдельные словари для каждого добавления:

Up_Dict = {A:20,B:35,C:22,D:15,E:10} 
Down_Dict = {A:50,B:40,C:42,D:40,E:5} 

что бы самый лучший способ выполнить это дополнение, потому что оба словаря у меня огромные?

Чем вы!

+0

"оптимальный"? и каков критерий оптимальности? – BartoszKP

+0

прямо сейчас, Время. Спасибо за быстрый ответ ! – AUK

+0

Для таких небольших коллекций вы никогда не заметите разницы. Сначала попробуйте придумать любое решение для себя. Тогда вы можете сосредоточиться на «оптимизации», если вам действительно нужно. – BartoszKP

ответ

0

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

keys = set(Dict1.keys()+Dict2.keys()) 
dic1 = {k:Dict1[k] if k in Dict1 else {1:0, 2:0} for k in keys} 
dic2 = {k:Dict2[k] if k in Dict2 else {1:0, 2:0} for k in keys} 
out = {k:{'up': dic1[k][1]+dic2[k][2], 'down': dic2[k][1]+dic1[k][2]} for k in keys} 

Это дает следующий результат:

{'A': {'down': 50, 'up': 20}, 
'B': {'down': 40, 'up': 35}, 
'C': {'down': 42, 'up': 22}, 
'D': {'down': 40, 'up': 15}, 
'E': {'down': 5, 'up': 10}} 
+0

эй, @Julien благодарит кучу .. это сработало !! :-) – AUK

+0

приветствую :-) –

0

Try это может быть худшим способом

keys = Dict1.keys()+Dict2.keys() 
>>>[{i:{"up":Dict1[i][1] if i in Dict1 else 0 + \ 
    Dict2[i][2] if i in Dict2 else 0,"down": Dict1[i][2] \ 
    if i in Dict1 else 0 + Dict2[i][1] if i in Dict2 else 0 }} \ 
    for i in set(keys)] 


[{'A': {'down': 20, 'up': 10}}, 
{'C': {'down': 12, 'up': 2}}, 
{'B': {'down': 30, 'up': 15}}, 
{'E': {'down': 5, 'up': 10}}, 
{'D': {'down': 40, 'up': 15}}]  
+0

Я думал о том, чтобы положить все в одно понимание ... но это было не очень читаемо ... поэтому я отказался от своего ответа :-) –

+0

@JulienSpronck Хорошая попытка человека :) – itzMEonTV

+0

Это сработало! Благодаря !! :-) – AUK

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