2011-09-21 22 views
6

कहते हैं कि मैं एक अजगर शब्दकोश है, लेकिन मूल्यों एक टपल हैं:क्वेरी अजगर शब्दकोश टपल से मूल्य प्राप्त करने के

जैसे

dict = {"Key1": (ValX1, ValY1, ValZ1), "Key2": (ValX2, ValY2, ValZ2),...,"Key99": (ValX99, ValY99, ValY99)} 

और मैं टुपल से केवल तीसरा मान पुनर्प्राप्त करना चाहता हूं, उदाहरण के लिए। उपरोक्त उदाहरण से ValZ1, ValZ2, या ValZ99।

मैं इतना .iteritems() का उपयोग कर, के रूप में उदाहरण के लिए कर सकता है:

for key, val in dict.iteritems(): 
     ValZ = val[2] 

तथापि, वहाँ एक और अधिक प्रत्यक्ष दृष्टिकोण है?

आदर्श रूप में, मैं कुंजी द्वारा शब्दकोश क्वेरी और टपल एकमात्र तीसरे मान देने के लिए ...

जैसे चाहें

बजाय मैं वर्तमान में क्या मिलता है की dict[Key1] = ValZ1, जो dict[Key1] = (ValX1, ValY1, ValZ1) जो प्रतिदेय नहीं है है ...

किसी भी सलाह?

उत्तर

7

बस रखने के अनुक्रमण:

>>> D = {"Key1": (1,2,3), "Key2": (4,5,6)} 
>>> D["Key2"][2] 
6 
+0

ग्रेट। ठीक वही जो मेरे द्वारा खोजा जा रहा था! धन्यवाद। – jsnider

+0

आपका स्वागत है। प्रश्न के उत्तर (बाईं ओर स्थित चेक बॉक्स) को भी स्वीकार करना न भूलें। –

4

उपयोग टपल unpacking:

for key, (valX, valY, valZ) in dict.iteritems(): 
     ... 

अक्सर लोगों का उपयोग

for key, (_, _, valZ) in dict.iteritems(): 
     ... 

अगर वे केवल टपल में से एक आइटम में रुचि रखते हैं। लेकिन यदि आप बहु भाषा अनुप्रयोगों के लिए gettext मॉड्यूल का उपयोग करते हैं, तो यह समस्या पैदा कर सकता है, क्योंकि यह मॉडल _ नामक वैश्विक फ़ंक्शन सेट करता है।

x, y, z = d[key] 
d[key] = x, newy, z 
+0

बहुत उपयोगी, धन्यवाद! वहां दो अलग-अलग विकल्प हैं। चीयर्स! – jsnider

1

tuples अपरिवर्तनीय हैं, आप नहीं निर्धारित करने में सक्षम केवल एक

की तरह आइटम
d[key][0] = x 

आप पहली बार अनपैक करने के लिए कर रहे हैं जनरेटर अभिव्यक्ति का उपयोग करना!

for val in (x[2] for x in dict): 
    print val 

आपको iteritems का उपयोग करने की आवश्यकता नहीं है क्योंकि आप केवल मूल्यों को देख रहे हैं।