2011-12-02 16 views
5

यह शायद एक नोब प्रश्न है। किसी भी शब्दकोश 'प' अजगर में के लिए यह हमेशा सच है:पायथन शब्दकोशों में कुंजी-मूल्य स्थिरता

dict(zip(d.keys(), d.values())) == d 

कुंजी और मूल्यों में एक ही इसी क्रम में लौट आए हैं?

उत्तर

6

हाँ यह हमेशा सच है। पाइथन द्वारा गारंटी अगर ifition में कोई हस्तक्षेप संशोधन नहीं है।

प्रासंगिक कल्पना:

dict((k,v) for k,v in d.iteritems())

+2

अनपॅकिंग अनावश्यक है, हालांकि 'dict (d.iteritems()) 'भी काम करता है। उस मामले के लिए, अधिकांश डिक्ट्स ('dict' सहित) विशेष-मामले मैपिंग (सामान्य रूप से पुनरावृत्तियों पर) और वैसे भी ऐसा करते हैं, हालांकि मुझे यकीन नहीं है कि यह सार्वभौमिक है या नहीं। – delnan

+0

@ डेलन ने आपकी टिप्पणी को ऊपर उठाया, लेकिन मुझे लगता है कि उदाहरण के करीब रखना यहां समझ में आता है। – Triptych

+0

आप वास्तव में कभी भी 'dict ((के, v) के लिए v, v में d.iteritems()) या' dict (d.iteritems()) '' 'c.copy()' बेहतर नहीं करना चाहते हैं । – Gabe

2

आप चाहे पूछ रहे हैं: http://docs.python.org/library/stdtypes.html#dict.items

यह बेहतर आम तौर पर, दोनों क्योंकि यह dict सिंक्रनाइज़ेशन से बाहर जा रहा के खिलाफ रक्षा करता है और नगण्य अतिरिक्त मेमोरी का उपयोग करता है कुंजी और मान एक ही क्रम में लौटाए जाते हैं, जवाब हां है। documentation का कहना है: keys(), values(), iteritems(), iterkeys(), और itervalues() शब्दकोश में कोई हस्तक्षेप संशोधनों के साथ कहा जाता है

तो items(),, सूचियों अनुरूप सीधे होगा।

आप पूछ रहे हैं कि क्या dict(zip(d.keys(), d.values())) == d हमेशा सभी परिस्थितियों में सही पर मूल्यांकन करेंगे, इस सवाल का जवाब नहीं, आप एक से अधिक थ्रेड हो सकता है, एक d बदल रहा है, जबकि अन्य एक d.keys() निष्पादित हो रहा है, d.values(), या dict(...) के साथ है। यह ऊपर उल्लिखित शर्तों को अमान्य कर, हस्तक्षेप संशोधन करेगा।

2

हाँ, यह है एक गारंटीकृत व्यवहार के रूप में d.items द्वारा दिया :-)

कुंजी और मूल्यों उसी क्रम में सूचीबद्ध हैं: http://docs.python.org/library/stdtypes.html#dict.items

नोट मल्टी-थ्रेडेड वातावरण में, यह को d.keys() और d.values() पर लगातार कॉल के बीच एक उत्परिवर्तन जोखिम के बजाय d.items() निकालने के लिए सबसे अच्छा है।

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