2017-07-31 1 views
1

J'ai un dictionnaire que pour chaque clé il y a cinq valeurs dans la liste, tels que:Comment faire la somme des valeurs du dictionnaire en fonction de la position?

{"A": [0, 0.12, 0, 0.73, 0], "B": [0.96, 0, 0.30, 0, 0], 
    "C": [0, 0, 0, 0.11, 0], "D": [0, 0.07, 0, 0.42, 0]} 

Je veux résumer la première, deuxième et etc valeurs pour toutes les clés et l'ajouter dans la nouvelle liste, tels que:

[0.96, 0.19, 0.3, 1.26, 0] 

J'ai essayé par le code ci-dessous résoudre, mais cela n'a pas fonctionné:

aa = {"A": [0, 0.12, 0, 0.73, 0], "B": [0.96, 0, 0.30, 0, 0], "C": [0, 0, 0, 0.11, 0], "D": [0, 0.07, 0, 0.42, 0]} 
bb = [] 
for value in (aa.items()): 
    for item in value: 
     bb.append(item) 
+1

que voulez-vous dire "ne fonctionnait pas"? Quelle erreur avez-vous obtenu? – honi

+1

'dict.items()' retourne le générateur de valeur-clé 'tuple's, si vous avez besoin de parcourir les valeurs, utilisez' dict.values ​​() ' –

+0

Salut @honi, le résultat est:' ['A', [ 0, 0.12, 0, 0.73, 0], 'C', [0, 0, 0, 0.11, 0], 'B', [0.96, 0, 0.3, 0, 0], 'D', [0, 0.07, 0, 0.42, 0]] ' – nickan

Répondre

1

Vous pouvez utiliser la fonction zip()

aa = {"A": [0, 0.12, 0, 0.73, 0], "B": [0.96, 0, 0.30, 0, 0], "C": [0, 0, 0, 0.11, 0], "D": [0, 0.07, 0, 0.42, 0]} 
bb = [] 

for value in (zip(*list(aa.values()))): 
      bb.append(sum(value)) 


print (bb) 

sortie:

[0.96, 0.19, 0.3, 1.26, 0] 
+0

Merci @Kaushik Nayak, c'est fait. – nickan

+1

Ou plus simplement: 'bb = [somme (valeur) pour la valeur dans zip (* aa.values ​​())]' – AChampion

-1

Tout d'abord, vous voulez utiliser aa.values(), pas aa.items(). aa.items donne des tuples de (clé, valeur), mais vous voulez juste les valeurs. En second lieu, vous voulez additionner les éléments de la liste, utilisez donc sum.

aa = {"A": [0, 0.12, 0, 0.73, 0], "B": [0.96, 0, 0.30, 0, 0], "C": [0, 0, 0, 0.11, 0], "D": [0, 0.07, 0, 0.42, 0]} 
bb = [] 
for value in (aa.values()): 
     bb.append(sum(value)) 
+0

pourquoi le downvote? – honi

+0

résultat pour votre code est: [0.85, 0.11, 1.26, 0.49], que c'est incorrect. – nickan

+0

ah, j'ai mal compris votre question. – honi

1

cela vous dérange d'utiliser numpy? sinon vous pouvez utiliser cette

aa = {"A": [0, 0.12, 0, 0.73, 0], "B": [0.96, 0, 0.30, 0, 0], "C": [0, 0, 0, 0.11, 0], "D": [0, 0.07, 0, 0.42, 0]} 

import numpy as np 
bb = np.array([aa.get(a) for a in aa]) 
print(np.sum(bb, axis=0)) 

la sortie sera: [0,96 0,19 0,3 1,26 0]

1

Vous pouvez utiliser reduce en plus avec zip pour calculer la somme par un élément sage.

from functools import reduce 

a = {"A": [0, 0.12, 0, 0.73, 0], "B": [0.96, 0, 0.30, 0, 0], 
    "C": [0, 0, 0, 0.11, 0], "D": [0, 0.07, 0, 0.42, 0]} 

b = reduce(lambda x, y: ([x1 + y1 for x1,y1 in zip(x,y)]), a.values()) 
1

Vous pouvez essayer de manière plus simple:

>>> aa = {"A": [0, 0.12, 0, 0.73, 0], "B": [0.96, 0, 0.30, 0, 0], "C": [0, 0, 0, 0.11, 0], "D": [0, 0.07, 0, 0.42, 0]} 
>>> b = [sum(value) for value in zip(*aa.values())] 
>>> b 
[0.96, 0.19, 0.3, 1.26, 0] 
>>>