2012-08-07 14 views
8

में दो शब्दकोशों के मूल्यों को विभाजित करें मेरे पास एक ही कुंजी के साथ दो शब्दकोश हैं और मैं कुंजी को बरकरार रखने के लिए मूल्यों पर विभाजन करना चाहता हूं, कुंजी को बरकरार रखने के लिए, कोयंट के साथ नए मान के रूप में प्रत्येक चाबियाँ।पायथन

d1 = { 'a':12 , 'b':10 , 'c':2 } 
d2 = { 'a':0 , 'c':2 , 'b':5} 
d3 = d2/d1 

d3 = { 'a':0 , 'b':0.5 , 'c':1 } 

एक तरफ कुंजी, मान जोड़ों के माध्यम से पुनरावृत्ति और मूल्यों के आदेश दिया सूचियां बनाते समय, तो विभाजित से, मैं ऐसा करने के तरीके यकीन नहीं है। मैं एक और अधिक सुरुचिपूर्ण समाधान की उम्मीद कर रहा था।

उत्तर

13

का उपयोग viewkeys (python2.7):

{k: float(d2[k])/d1[k] for k in d1.viewkeys() & d2} 

अजगर 3 (जहां हम float() पूरी तरह से कॉल ड्रॉप कर सकते हैं) में एक ही:

{k: d2[k]/d1[k] for k in d1.keys() & d2} 

हाँ, मैं यहाँ एक प्रमुख चौराहे का उपयोग कर रहा ; यदि आप पूरी तरह से सुनिश्चित अपनी चाबी दोनों में एक ही कर रहे हैं, बस d2 का उपयोग करें:

{k: float(d2[k])/d1[k] for k in d2} 

और, पूरा करने के लिए अजगर 2.6 में और इससे पहले कि आप होगा एक जनरेटर अभिव्यक्ति के साथ एक dict() निर्माता का उपयोग करने के लक्ष्य को हासिल करने वही:

dict((k, float(d2[k])/d1[k]) for k in d2) 

जो कुंजी-मूल्य tuples का अनुक्रम उत्पन्न करता है।

+0

कुंजी चौराहे आवश्यक नहीं है, ओपी का कहना है कि 2 डिक्ट्स की एक ही कुंजी है – jamylak

+0

@jamylak: क्षमा से बेहतर सुरक्षित? :- पी –

+0

@ मार्टिजिनपेटर्स आप सही हैं! – jamylak

5

यह सब अजगर के लिए काम करता है, मैं फिर भी @MartijnPieters द्वारा समाधान की अनुशंसा करता है, तो Py 2.7+

>>> d1 = { 'a':12 , 'b':10 , 'c':2 } 
>>> d2 = { 'a':0 , 'c':2 , 'b':5} 
>>> d3 = dict((k, float(d2[k])/d1[k]) for k in d2) 
>>> d3 
{'a': 0.0, 'c': 1.0, 'b': 0.5} 
है
4
d1 = { 'a':12 , 'b':10 , 'c':2 } 
d2 = { 'a':0 , 'c':2 , 'b':5} 
d3={x:float(d2[x])/d1[x] for x in d1} 
print d3 

उत्पादन होगा:

{'a': 0.0, 'c': 1.0, 'b': 0.5} 
+0

+1 कभी नहीं पता था कि यह डिक्ट्स के लिए भी काम करता है! – SuperSaiyan

+2

@ थ्रस्टमास्टर: इसे एक धक्का समझ कहा जाता है; पायथन 2.7 में पेश किया गया: [पीईपी 274] (http://www.python.org/dev/peps/pep-0274/)। –

+0

@MartijnPieters: कमाल! धन्यवाद :) – SuperSaiyan

1

3,2 में आप का उपयोग करें। कुंजी() विधि और .get (कुंजी)। http://www.tutorialspoint.com/python/python_dictionary.htm

+0

'.get (कुंजी) 'रिटर्न कोई नहीं अगर कुंजी परिभाषित नहीं है। हालांकि यह हमेशा होगा यदि आप '.keys()' पर लूप करते हैं, तो इसका मतलब है '.get (key)' केवल सादा आइटम पहुंच ('d1 [key]') से धीमा है। –

+0

यह पायथन 2 में भी काम करता है – jamylak

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^