2012-12-11 14 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を生成すると、自動的にソートされ、文字列がアルファベット順に表示されます。私は文字列の元の順序を保持する必要があります。これを行う方法はありますか?dict.fromkeys()で自動ディクショナリソートを無効にしますか?

ここに任意のヘルプ

感謝感謝!

答えて

7

それは自動的にこれは非常に正確でないアルファベット順に文字列を辞書を生成する、

をソートします。 Pythonの標準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

Python dictionariesは「順不同」です - 辞書でアイテムが生成される順序は、実装(および挿入順序)に依存し、他の時間にはほとんどランダムに見えるか、見た目はきれいに並べ替えることができます。 Cpythonについては、興味のある読者のためにadditional informationをいくつか紹介します。

代わりにcollections.OrderedDictを使用できます(挿入順序を記憶しています)。 OrderedDictがpython2.7で追加されました。以前のバージョンでは、ActiveState recipeがPythonの公式ドキュメントにリンクされています。

関連する問題