2011-12-23 22 views
2

私はPython 2.7でうまく動作しています。 "dist"は数字の辞書であり、 "min_dist"は単なる数字です。Python3の移植:TypeError:順序付け不可能な型:dict()<int()

for v in vertices: 
    if dist[v.node_id] < min_dist: 
     min_dist = dist[v.node_id] 
     cur_min = v 

今私は、Python 3.2の下でそれを実行しようとしていますし、それは私に、このエラーを与える:

if dist[v.node_id] < min_dist: 
TypeError: unorderable types: dict() < int() 

のpython 3.2での私のコードが間違っていますか?

+0

dist [v.node_id]が辞書の場合、if dist [v.node_id]

+0

ああ、コードのこの部分は実行されますが、{}でdist(v.node_id)を初期化(つまり間違って)して問題を初期化するコードがあります。コードの他のすべての部分は、数字で適切に初期化を行います。 – Hery

+0

まったく同じように同じバグが表示されたので、一人ではありません;-)これを見て、すぐに修正することができました! – tdc

答えて

2

distは "数字の辞書"ではなく、辞書のの辞書です。あなたのコードは2.xでも動作しません。

+1

はい、私のコードはPython 2.7で動作します。私はもう一度それを確認した。 – Hery

+1

次に、他の場所で移植を行ったことがあります。 –

+0

あなたは正しいです。私は別の場所でうんざりした。コードはLennartによって説明された理由のために2.7でまだ "働く"。 – Hery

10

あなたのコードはPython 2でも「間違っています」。辞書と整数を比較するのは意味がありません。それは色が数字よりも大きいかどうかを尋ねるのと同じように、単に意味をなさない。

Python 2では、このようなさまざまな型の比較が可能であり、辞書は常に任意の数値よりも大きいと言います。でも、空の辞書は数より大きい:

>>> import sys 
>>> {} > sys.maxint 
True 

このような比較は意味がない、とPython 3の代わりに正しく提起し、エラー、実際に「私はあなたが何を意味するか分からない」と言って、はるかに優れていると誤った比較を避ける。

+0

ありがとうございます。あなたの説明は私が問題の原因を見つけるのを助けました。 – Hery

関連する問題