2009-04-05 8 views
6

私はこれの実装をいくつか見てきました。最高と見なされているか、標準として浮上しているものはありますか?Pythonで最もよく命令された辞書実装は何ですか?

私が注文した辞書の意味は、オブジェクトにはPHPの配列に似たキーの順序のコンセプトがいくつかあるということです。

odict PEP 372は強力な候補のようですが、それが勝者であることは全く明らかではありません。

+2

-1:「ベスト」は定義されていません。 –

答えて

8

標準は見ていません。誰もが自分のロールを出すようだ(this questionへの回答を参照)。 PEP 372のOrderedDictpatchを使用できる場合は、これが最良の方法です。 stdlibに含まれているものは、今から1年か2年後に誰もが使用している可能性が非常に高いです。

12

レイモンド・ヘッティンガーによるこの1は、ドロップイン代替collections.OrderedDict用のPython 2.7で表示されますです:http://pypi.python.org/pypi/ordereddict

ドキュメントは、それは、Python 2.7でどうなるかと同等だと言うのコレクションのDEV版、おそらく、Pythonに付属するものへのスムーズな移行である可能性が高いでしょう。

私はあなたがeasy_install ordereddictでそれをインストールすることができますので、は、PyPIに入れ、そしてそのようにそれを使用しました:

from ordereddict import OrderedDict 
d = OrderedDict([("one", 1), ("two", 2)]) 
+0

Raymond Hettingerのordereddictは、collections.OrderedDictよりも短く見えます。私はcollections.OrderedDictがRaymondのものよりも優れていると思っていました。どのようにして、標準パッケージに含まれているものは、他のパッケージほどうまくいかないのでしょうか? – FrostNovaZzz

+0

@FrostNovaZzz collections.OrderedDictはこれまでにはるかに多くの使用を見ていますので、 "控えめな"違いは実際にはバグ修正です。 – shoyer

1

のPython 2.7およびそれ以降のバージョンにあなたがそのよう考慮する必要がありますので、collectionsモジュールでOrderedDictを持っています'標準'。その機能が十分であれば、おそらくそれを使用しているはずです。

しかし、その実装方法は最小限です。十分でない場合は、Foord/Larossaまたはordereddictodictを参照してください(その場合はより適切です)。どちらの実装も、collections.OrderedDictによって提供される機能のスーパーセットです。両者の違いは、odictは純粋なpythonであり、ordereddictははるかに高速のC拡張モジュールです。

最小限のアプローチは、必要な機能をすべて備えていても必ずしも優れているわけではありません。 collections.OrderedDictは、OrderedDictrepr()を独自の値のいずれかにネストした場合、最初はbugでした。以前に発見された可能性のあるバグには、サブセット、OrderedDictが処理できる小さなサブセット、古いユニットテストのユニットテストが使用されていたordereddict

+0

あなたの仕事のおかげで、アンソン!私はあなたの命令を受けようとしていましたが、あなたのウェブサイトのzipとtarの両方のアーカイブは死んでいました。さらに、私はこのプロジェクトがまだ生きているのか少し気になりますか?将来のPythonで更新される予定ですか?また、それをピップに置くともっと人気が出るかもしれませんか?あなたのウェブサイトで7倍のスピードアップを見ていますが、なぜPython開発者がこの実装をPythonのデフォルトとして選択しなかったのか分かりません。 – jichi

+0

@jichi私は 'ordereddict'を[bitbucket](https://bitbucket.org/ruamel/ordereddict)に移動し、' pip'でインストール可能にしています。 tatの後、私はPython 3.Xの互換性についても見ていきます(おそらく、collections.OrderedDictのような機能を備えた、切り捨てられたバージョンに基づいています)。ウェブサイトのリンクが再び機能するはずです。 – Anthon

+0

偉大な、リンクは今動作します。あなたの仕事に感謝します! – jichi

2

collections.OrderedDictが現在広く使用できるはずですが、パフォーマンスが懸念される場合は、cyordereddictパッケージを使用することを検討してください。標準ライブラリのOrderedDict to Cythonへの直接的な移植で、2〜6倍高速です。

関連する問題