2017-12-13 4 views
1

今日私はquestionに質問しました。これは、豊富な比較メソッドを使用した比較演算子の実装を実際に理解できなかったためです。両者の違いをよく説明してくれてありがとうございました。なぜOrderedDictは比較演算子を実装していません

基本的に、私が理解したところでは、Python 3は__cmp__()の魔法の使用を中止しました。オペランドは意味のある自然順序付けを持っていないとき

、今から注文比較演算子は(<、< =、> =、>)はTypeError 例外を発生させます。

したがって、私はOrderedDictが有効であると考えました。しかし、私の驚いたことに、

なぜ、OrderedDictは比較演算子を実装していないのですか?

リンクされた質問の回答のコメントでは、トピックについて話を始めました。下線が引かれているものの1つはです。なぜあなたは物事を比較したいのですか?独自の方法を実装して明示的に比較することができます

はなぜ(でもPythonの3)、

list1 = [1,2,3] 
list2 = [4,5,6] 
>>> list1 < list2 
True 

は似たような状況ではないですか?

答えて

4

「意味のある自然順序付け」とは、2つのオブジェクトのどちらが大きいかを判断する「自然な」方法を指します。オブジェクトが順序付けられたコレクションであるかどうかは示しません。

OrderedDictは、そのエントリに順序を付けることができますが、2つのOrderedDict間に自然順序付けの関係はありません。

+0

でenhancment要求をsupmitしてください?むしろ自然であると主張できますか? –

+0

@PaulPanzer:私は自分の答えを拡張するかもしれませんが、要点はOrderedDictの使用例とは無関係で、Python 2の通常のdictsとの互換性を混乱させてしまいます(そして自動性のある '=='は十分に悪いです)。初期のPythonの "すべてのものを比較する"というアプローチは吸うことが判明しましたが、私は彼らが強い正当性なしに比較演算子を投げたいとは思っていませんでした。 – user2357112

0

@scharette、私は特定の角度の下では、OrderedDictが本当にO(1)アクセス時間のリンクリストのように見えることに同意します。 cpythonの開発者は、このビューをOrderedDictのC implementationへのコメントで共有します。

あなたの質問に対する私の答えは簡単です。

original proposalには比較演算子がありませんでした。

ませ提案がbugs.python.orgてもようでもない追加されませんでしたPEP

あなたはOrderedDictに比較演算子を追加する価値があると感じた場合は、どのような項目の辞書についてhttps://bugs.python.org/

関連する問題