2013-03-11 42 views
6

Tôi có hai từ điển riêng biệt với khóa và giá trị mà tôi muốn nhân với nhau. Các giá trị sẽ được nhân lên chỉ bằng các phím mà chúng có.Nhân các giá trị từ hai từ điển khác nhau với nhau trong Python

ví dụ:

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} 

Nếu bất cứ ai có thể giúp đỡ, đó sẽ là tuyệt vời. Cảm ơn!

Trả lời

16

Bạn có thể sử dụng một dict comprehension:

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

Hoặc, trong pre-2,7 Python, các dict constructor kết hợp với một generator expression:

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

Điều này thật tuyệt vời, cảm ơn! – 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

Giả sử bạn sử dụng câu lệnh 'print' chứ không phải là hàm, tôi nghĩ bạn có ý định trả lời Python 2.x trong trường hợp đó là câu trả lời nghèo vì bài kiểm tra' if k trong d2.keys(): 'sẽ tạo một danh sách mới chứa tất cả các phím 'd2' mỗi lần vòng vòng ngoài. 'nếu k trong d2:' rất được ưu tiên. (Điều tương tự cũng áp dụng cho vòng lặp 'for' nhưng vì nó chỉ thực hiện một khi nó không thực sự quan trọng) – Duncan

+0

Cảm ơn rất nhiều, tôi nên xem xét nhiều hơn về permorece. –

+0

Cảm ơn bạn đã trả lời! Điều đó làm việc rất đẹp. – user2156072

0

Từ điện thoại của tôi, vì vậy chút khó gõ mã. Điều này nên thực hiện thủ thuật:

for key, value in dict1.iteritems(): 
    if key in dict2: 
     dict3[key] = int(dict1[key]) * int(dict2[key]) 
Các vấn đề liên quan