/ / Python - Ajout des valeurs d'un dictionnaire dans un dictionnaire basé sur les mêmes clés - python, boucles, dictionnaire

Python - Ajout des valeurs d'un dictionnaire dans un dictionnaire basé sur les mêmes clés - python, boucles, dictionnaire

J'ai donc 2 dictionnaires au sein de dictionnaires. Je dois ajouter les valeurs des 2 dictionnaires internes en fonction des clés des dictionnaires externes. Par exemple.

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}}

Donc, je dois ajouter les valeurs de 1 de Dict1 àvaleurs de 2s à Dict2. Par exemple, pour la clé A des deux dictionnaires, l'addition des valeurs 1 de Dict1 et 2s forme Dict2: 10 + 10 = 20 et inversement, c'est-à-dire 2s de Dict1 + 1s de Dict 2: 20 +30 = 50 et crée un nouveau dictionnaire: { A: {up: 20, down = 50}}

Donc, la sortie souhaitée serait:

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}}

Ou créez simplement des dictionnaires séparés pour chaque ajout:

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

Quel serait le meilleur moyen de procéder à cette addition car les deux dictionnaires que j'ai sont énormes?

Que toi !!

Réponses:

0 pour la réponse № 1

Vous pouvez utiliser quelques compréhensions de dictionnaire. Je remplis d'abord les deux dictionnaires avec les clés manquantes, puis retourne un dictionnaire avec la somme souhaitée.

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}

Cela donne la sortie suivante:

{"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 pour la réponse № 2

Essayez ceci peut être le pire moyen

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}}]