2012-12-11 11 views
5
def parse_urls(weeks_urls): 
    for wkey in weeks_urls.keys(): 
     results=urllib2.urlopen(weeks_urls[wkey]) 
     lines = list(csv.reader(results)) 
     lines=clean_lines(lines) 
     week_dict=dict.fromkeys(lines[i][1] for i in range(len(lines))) 
     fare_data=list((lines[i][1:]) for i in range(3,len(lines))) 
     fare_data=get_fare_data(fare_data) 
     n=3 
     for station in week_dict: ..... 
....... 

जब मैं dict.fromkeys() का उपयोग स्ट्रिंग्स की सूची से एक निर्देश बनाने के लिए करता हूं, तो यह स्वचालित रूप से उन्हें क्रमबद्ध करता है, तारों के साथ तारों के साथ एक निर्देश का उत्पादन करता है। मुझे स्ट्रिंग के मूल क्रम को संरक्षित करने की आवश्यकता है। क्या इसे करने का कोई तरीका है?dict.fromkeys() के साथ स्वचालित dict सॉर्टिंग अक्षम करें?

किसी भी मदद के लिए यहाँ

धन्यवाद के लिए आभारी!

उत्तर

7

यह स्वचालित रूप से उन्हें सॉर्ट करता, वर्णमाला के क्रम

यह काफी सही नहीं है में तार के साथ एक dict का निर्माण किया। पायथन का मानक dict अनियंत्रित है, जिसका अर्थ यह है कि वस्तुओं को पुन: व्यवस्थित करने की अनुमति है। इसलिए आप किसी भी विशेष क्रम में दिखाई देने वाली कुंजियों पर भरोसा नहीं कर सकते (न ही सम्मिलन/हटाए जाने पर उसी क्रम में)।

प्रविष्टि क्रम बनाए रखने के लिए, आपको collections.OrderedDict इस्तेमाल कर सकते हैं:

In [6]: l = [1, 2, 20, 5, 10] 

In [7]: list(dict.fromkeys(l).keys()) 
Out[7]: [1, 2, 10, 20, 5] 

In [8]: list(collections.OrderedDict.fromkeys(l).keys()) 
Out[8]: [1, 2, 20, 5, 10] 
+0

इस काम करता है - धन्यवाद! – user1799242

3

पायथन dictionaries "अनियंत्रित" हैं - आपके शब्दकोश में वस्तुओं को उत्पन्न करने का आदेश कार्यान्वयन (और सम्मिलन आदेश) निर्भर है और समय पर लगभग यादृच्छिक रूप से दिखाई दे सकता है या स्पष्ट रूप से अन्य समय (स्पष्ट रूप से) क्रमबद्ध किया जा सकता है। Cpython के लिए, रुचि पाठक के लिए यहां कुछ additional information है।

आप इसके बजाय collections.OrderedDict का उपयोग कर सकते हैं (जो सम्मिलन आदेश को याद करता है)। OrderedDict को python2.7 में जोड़ा गया था, पहले के संस्करणों के लिए ActiveState recipe है जो कि अजगर आधिकारिक दस्तावेज में जुड़ा हुआ है।

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