2013-03-11 6 views
6

में दो अलग-अलग शब्दकोशों से मूल्यों को गुणा करना मेरे पास दो अलग-अलग शब्दकोश हैं जिनमें चाबियाँ और मान हैं जिन्हें मैं एक साथ गुणा करना चाहता हूं। मूल्यों को केवल उन चाबियों से गुणा किया जाना चाहिए जो उनके पास हैं।पाइथन

अर्थात

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} 

अगर कोई मदद कर सकता है, कि बहुत अच्छा होगा। धन्यवाद!

उत्तर

16

आप उपयोग कर सकते हैं एक dict comprehension:

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

या, पूर्व 2.7 अजगर, एक generator expression के साथ संयोजन में dict निर्माता में:

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

यह आश्चर्यजनक है, धन्यवाद! – 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

यह देखते हुए कि आप किसी फ़ंक्शन के बजाय 'प्रिंट' कथन का उपयोग करते हैं, मुझे लगता है कि आप पाइथन 2.x के लिए अपना जवाब चाहते हैं, इस मामले में यह परीक्षण के रूप में एक खराब जवाब है 'if k में d2.keys():' बना देगा एक नई सूची जिसमें बाहरी लूप के चारों ओर हर बार 'd2' कुंजी होती है। 'अगर डी 2 में के: 'पसंद किया जाना बहुत पसंद है। (वही 'लूप' पर लागू होता है, लेकिन जब यह वास्तव में कोई फर्क नहीं पड़ता है तो केवल निष्पादित होता है) – Duncan

+0

बहुत धन्यवाद, मुझे परमिट के बारे में और अधिक विचार करना चाहिए था। –

+0

उत्तर के लिए धन्यवाद! वह खूबसूरती से काम किया। – user2156072

0

मेरी टेलीफोन से, तो बिट कोड टाइप करना मुश्किल है। यह चाल चलाना चाहिए:

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