2013-03-11 12 views
6

Mam dwa oddzielne słowniki z kluczami i wartościami, które chciałbym pomnożyć razem. Wartości należy pomnożyć przez klucze, które mają.Mnożenie wartości z dwóch różnych słowników razem w Pythonie

tj

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} 

Jeśli ktoś mógłby pomóc, że byłoby świetnie. Dzięki!

Odpowiedz

16

Można użyć dict comprehension:

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

Lub, w pre-2.7 Python, konstruktora dict w połączeniu z generator expression:

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

To jest niesamowite, dzięki! – 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

Biorąc pod uwagę, że używasz instrukcji 'print', a nie funkcji, myślę, że masz zamiar odpowiedzieć na Python 2.x, w którym to przypadku jest to słaba odpowiedź jako test' if k w d2.keys(): 'utworzy nowa lista, która zawiera wszystkie klucze 'd2' za każdym razem wokół zewnętrznej pętli. 'jeśli k in d2:' jest bardzo korzystne. (To samo dotyczy pętli 'for', ale jest to wykonywane tylko wtedy, gdy to naprawdę nie ma znaczenia) – Duncan

+0

Wielkie dzięki, powinienem rozważyć więcej na temat permorece. –

+0

Dzięki za odpowiedź! To działało pięknie. – user2156072

0

Z mojego telefonu, więc bit trudny do wpisania kod. To powinno załatwić:

for key, value in dict1.iteritems(): 
    if key in dict2: 
     dict3[key] = int(dict1[key]) * int(dict2[key]) 
Powiązane problemy