我有一個繼承自OrderedDict的類。我想能夠遍歷它的值,而不是它的鍵。迭代字典子類中的值
我相信下面的代碼應該可以工作,但事實並非如此。它不會打印「one」和「two」值,它會產生某種遞歸錯誤(如代碼下方所示)。
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()
作爲詞典的不一致性,例如,不包括列表。我確實需要代碼中其他部分的字典功能。
[意見反饋]刪除'return' – sangheestyle
這樣做的意義何在?人們會期望字典在迭代中返回鍵而不是值。只需使用'a.itervalues()'。 –
@sangheestyle這不會做任何事情。 –