2012-05-16 15 views
5

समस्या कमरे की संख्या और अतिथि विवरणों की एक सूची है जो मैंने सीधे एक txt फ़ाइल से फिसल दी है जिसे कक्ष संख्या के साथ एक शब्दकोश में कुंजी और विवरण के रूप में विवरण के रूप में रखा जाना चाहिए।मैं एक शब्दकोश को सॉर्ट कैसे करूं?

अतिथि सूची सचमुच एक सूची है, प्रत्येक आइटम कमरे का नंबर, अतिथि नाम, आगमन, प्रस्थान तिथियों का प्रतिनिधित्व करती है। उनके बगल में कुछ भी कमरे खाली हैं।

nlist = [['101'], ['102'], ['103'], 
['201', ' John Cleese', ' 5/5/12', ' 5/7/12'], ['202'], 
['203', ' Eric Idle', ' 7/5/12', ' 8/7/12'], ['301'], ['302'], ['303']] 

असल में, इसे एक शब्दकोश में प्राप्त करना है। यहाँ मैं क्या करने की कोशिश की है:

guests = {} 
for i in nlist: 
     if len(i) == 1: 
      key = i[0] 
      guests[key] = None 
     else: 
      key = i[0] 
      val = i[1],i[2],i[3] 
      guests[key] = val 

जो मुझे देता है:

guests = {'201': (' John Cleese', ' 5/5/12', ' 5/7/12'), 
'203': (' Eric Idle', ' 7/5/12', ' 8/7/12'), '202': None, '301': None, 
'302': None, '303': None, '102': None, '103': None, '101': None} 

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

क्या कोई जानता है कि कोड को सही तरीके से कैसे लिखना है ताकि शब्दकोश {'101': कोई नहीं, '102', कोई नहीं, '103': कोई नहीं ... आदि)? और उम्मीद है कि कोई यह समझा सकता है कि मेरा कोड क्यों काम नहीं करता था जैसा कि मेरा इरादा भी था।

+3

शब्दकोश प्रविष्टियां हैंश के रूप में संग्रहीत हैं और प्रकृति द्वारा, अनियंत्रित हैं। क्या आपके होमवर्क के लिए आपको एक शब्दकोश का उपयोग करने की आवश्यकता है? आपको उन्हें आदेश देने की आवश्यकता क्यों है? –

+0

[पाइथन शब्दकोश में ऑर्डर करने वाले आइटम] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/3127945/items-ordering-in-python-dictionary) – geoffspear

+1

क्षमा करें दोस्तों, मेरा शीर्षक थोड़ा भ्रामक है, है ना? मैं इस बात से ज्यादा दिलचस्पी लेता था कि उस विशेष तरीके से ताना क्यों झुका हुआ है। मैंने आपके सभी उत्तरों से जो कुछ इकट्ठा किया है वह यह है कि 'यह बस है' लॉल हां, इसे एक शब्दकोश की आवश्यकता होती है लेकिन अगर मैं – bang

उत्तर

10

मानक पायथन शब्दकोश स्वाभाविक रूप से अनियंत्रित हैं।

एक संभावना OrderedDict का उपयोग करना है। यह सम्मिलन आदेश को संरक्षित रखेगा, जिसका अर्थ है कि आपको उस क्रम में प्रविष्टियां डालना होगा जिसमें आप उन्हें पुनर्प्राप्त करना चाहते हैं। यह ध्यान दिया जाना चाहिए,

for k, v in sorted(guests.items()): 
    print k, v 

अंत में है कि अपने उदाहरण भंडार कक्ष संख्या के बजाय तार पूर्णांक के रूप में:

एक और संभावना dict रखने के लिए के रूप में है, लेकिन वांछित क्रम में पुनरावृति है। इसका मतलब है कि ऑर्डरिंग लेक्सिकोग्राफिक ('90' > '100') है। चूंकि यह होमवर्क है, इसलिए मैं इसे ठीक करने के तरीके को समझने के लिए इसे एक अभ्यास के रूप में छोड़ देता हूं।

+1

अच्छा संपादन। यह संभव है (क्योंकि यह होमवर्क है) कि ओपी केवल कुछ डेटा प्रकारों का उपयोग कर सकता है। –

+0

यह इंगित करना महत्वपूर्ण है कि ऑर्डर्ड डिक्ट का ऑर्डरिंग कुंजी (रूम नंबर) की बजाय सम्मिलन आदेश पर आधारित है, इसलिए इनपुट टेक्स्ट फ़ाइल के आधार पर, यह उपयुक्त नहीं हो सकता है। – hexparrot

+0

सावधान रहें कि कमरे की संख्या वास्तव में तार हैं और क्रमिक रूप से शब्दावली है। यदि छोटी संख्याएं '' '' के रूप में लिखी जाती हैं और '005 'नहीं होती हैं, तो यह काम नहीं करेगी। यदि यह मामला हो सकता है, तो एक विकल्प उन्हें पूर्णांक में परिवर्तित करना है। – pepr

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

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