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が生成されます。文字列の元の順序を保持する必要があります。これを行う方法はありますか?

ここで助けてくれてありがとう

ありがとう!

4

2 に答える 2

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]
于 2012-12-11T16:14:08.143 に答える
3

Python辞書は「順不同」です -- 辞書で項目が生成される順序は実装 (および挿入順序) に依存し、ほとんどランダムに表示されることもあれば、適切にソートされていることもあります (明らかに)。Cpython については、関心のある読者向けの 追加情報を次に示します。

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

于 2012-12-11T16:13:53.673 に答える