私はOrderedDictから継承するクラスを持っています。私はそのキーではなく、その値を反復できるようにしたい。ディクショナリサブクラスの値を反復する
私は次のコードがうまくいくはずだと思いますが、そうではありません。値 "1"と "2"を出力する代わりに、再帰エラー(コードの下に表示)の何らかの並べ替えを与えます。
from collections import OrderedDict
class A(OrderedDict):
def __init__(self):
super(A, self).__init__()
def __iter__(self):
for value in self.values():
yield value
return
a = A()
a[1] = "one"
a[2] = "two"
for thing in a:
print str(thing)
次のように私が手にエラーがある:
File "T:\***\Test024.py", line 8, in __iter__
for value in self.values():
File "C:\Python27\Lib\collections.py", line 111, in values
return [self[key] for key in self]
RuntimeError: maximum recursion depth exceeded while calling a Python object
上記の例では動作しないのはなぜ?私はfor thing in a.values():
のようなループで値を繰り返し処理できることを知っていますが、辞書の場合は.values()
を使用するのが矛盾しないようにしたいと思います。私はコードの他の部分で辞書の機能が必要です。
[間違ったコメント] remove 'return' – sangheestyle
これは何がポイントですか? 1つは、値ではなく反復でキーを返すことを期待しています。単に 'a.itervalues()'を使うだけです。 –
@sangheestyleそれは何もしません。 –