2010-12-20 14 views
11

पर सेट मैं शब्दकोश बना रही हूँ:शब्दकोश मैं शुरू

d = {"server":"mpilgrim", "database":"master"} 
d['mynewkey'] = 'mynewvalue' 

लेकिन मैंने देखा कि इस dict उलट है जब मैं यह प्रदर्शित करते हैं।

print(d) 

{'mynewkey': 'mynewvalue', 'database': 'master', 'server': 'mpilgrim'} 

इसे वापस कैसे करें?

या यदि यह सच है कि शब्दकोश सॉर्ट करने योग्य नहीं है, तो मुझे संग्रह करने के लिए उपयोग करना होगा जहां उस सूचना का क्रम महत्वपूर्ण है?

उत्तर

17

शब्दकोश अव्यवस्थित कर रहे हैं (आदेश नियतात्मक है, लेकिन कारकों तुम भी की नहीं लगता कि एक मुट्ठी पर निर्भर करता है और के बारे में परवाह नहीं करनी चाहिए:

इसके अलावा इस सवाल पर एक नजर है चाबियाँ, सम्मिलन का आदेश, टकराव, आदि)। पायथन 2.7+ में, collections.OrderedDict का उपयोग करें। यदि आपको पुराने संस्करण का उपयोग करना चाहिए, तो Google आपको विभिन्न बिंदुओं को इंगित कर सकता है।

+0

सबसे आसान कार्यान्वयन किया जा रहा है की सिफारिश करेंगे tuples की एक सूची, especiall अगर गति कोई मुद्दा नहीं है। – katrielalex

+0

हां, यह सबसे आसान है, लेकिन यह * बहुत * प्रदर्शन करता है। विशेष रूप से जब इसका उपयोग एल्गोरिदम के साथ किया जाता है जो "असली" मानते हैं (यानी 'ओ (1)' पढ़ना/लिखना/'में) dicts – delnan

1

आपकी डिक्शनरी काफी पीछे नहीं है। यह आपकी चाबियों के हैश के अनुसार आंशिक रूप से क्रमबद्ध है। आप इस आदेश को नहीं बदल सकते (कस्टम शब्दकोश का उपयोग किए बिना नहीं)। अजगर 2.7 या बाद में आप एक आदेशित शब्दकोश (collections.OrderedDict) का उपयोग कर सकते हैं।

पहले संस्करण में आप निम्नलिखित recipe का उपयोग कर सकते हैं। - के हैश What is the best ordered dict implementation in python?

17
from collections import OrderedDict 

d = OrderedDict() 
d["server"] = "mpilgrim" 
d["database"] = "master" 
d['mynewkey'] = 'mynewvalue' 

print(d) 

OrderedDict([('server', 'mpilgrim'), ('database', 'master'), ('mynewkey', 'mynewvalue')]) 
+0

नहीं, यह ठीक नहीं है, क्योंकि," सर्वर "प्रारंभ में:" mpilgrim "पहले था। अब दूसरा – user278618

+0

सही है, मैंने देखा जब मैंने महत्वपूर्ण प्रविष्टि तय की। 'ऑर्डरर्ड डिक्ट्स' के लिए, आपको [] ऑपरेटर ('__setitem__') का उपयोग करके कुंजी जोड़ने की आवश्यकता है। सम्मिलन आदेश संरक्षित है। – Aphex

3

आप अजगर 3.6 शब्दकोशों का उपयोग कर रहे हैं, तो अब प्रविष्टि आदेश से आदेश दिया जाता है

https://www.python.org/dev/peps/pep-0468/

अन्यथा (के रूप में अन्य लोगों ने कहा है कि) मैं collections.OrderedDict

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