2013-03-11 14 views
6

Ho due dizionari separati con chiavi e valori che vorrei moltiplicare insieme. I valori dovrebbero essere moltiplicati solo per le chiavi che hanno.Moltiplicazione dei valori di due dizionari diversi insieme in Python

cioè

dict1 = {'a': 1, 'b': 2, 'c': 3} 
dict2 = {'a': 15, 'b': 10, 'd': 17} 

dict3 = dict.items() * dict.items() 
print dict3 

#### #dict3 should equal 
{'a': 15, 'b': 20} 

Se qualcuno potrebbe aiutare, che sarebbe grande. Grazie!

risposta

16

È possibile utilizzare un dict comprehension:

>>> {k : v * dict2[k] for k, v in dict1.items() if k in dict2} 
{'a': 15, 'b': 20} 

Oppure, in pre-2.7 di Python, il dict costruttore in combinazione con un generator expression:

>>> dict((k, v * dict2[k]) for k, v in dict1.items() if k in dict2) 
{'a': 15, 'b': 20} 
+0

Questo è sorprendente, grazie! – AnonyMouse

0
dict1 = {'a': 1, 'b': 2, 'c': 3} 
dict2 = {'a': 15, 'b': 10, 'd': 17} 

def dict_mul(d1, d2): 
    d3 = dict() 
    for k in d1: 
     if k in d2: 
      d3[k] = d1[k] * d2[k] 
    return d3 

print dict_mul(dict1, dict2) 
+2

Dato che si usa un'istruzione 'print' piuttosto che una funzione, penso che intendi la tua risposta per Python 2.x nel qual caso è una povera risposta come il test' if k in d2.keys(): 'creerà una nuova lista che contiene tutte le chiavi di 'd2' ogni volta attorno al ciclo esterno. 'Se k in d2:' è molto da preferire. (Lo stesso vale per il ciclo 'for', ma come quello che viene eseguito solo quando non ha molta importanza) – Duncan

+0

Grazie mille, avrei dovuto considerare di più sul permorece. –

+0

Grazie per la risposta! Ha funzionato magnificamente – user2156072

0

Dal mio telefono, in modo da po ' difficile da digitare il codice. Questo dovrebbe fare il trucco:

for key, value in dict1.iteritems(): 
    if key in dict2: 
     dict3[key] = int(dict1[key]) * int(dict2[key]) 
Problemi correlati