这是一个基本上进行迭代的示例代码。
>>> d = {'lol': {'12': '3', '35':''}, 'w': {'12': '3', '35':''}}
>>> def iteritems(s):
... keys = s.keys()
... for key in keys:
... yield key, s[key]
...
>>> for k, v in iteritems(d):
... print k, v
...
w {'12': '3', '35': ''}
lol {'12': '3', '35': ''}
这是一个有效的发电机。但是生成器iteritems
必须调用s.keys()
来缓存字典中的所有键。如果字典很大(超过100个项目),那就没有内存效率。
但由于字典不是有序结构,我认为获取密钥列表是必须的。
有人可能会争辩说:键的数量远小于计算键和值的项目数。
有什么建议吗?或者更好的方式(当然我需要支持嵌套迭代,但这是另一回事)。
答案 0 :(得分:9)
在python 2.x中使用.iterkeys()
;在python 3.x,.keys()
is a view而不是新列表。在python 2.7中,您还可以使用viewkeys()
method来获得相同的东西。
有一个等效的.iteritems()
method,使您的实用工具方法变得多余。 :-)同样的评论适用于python 3.x和2.7,请参阅提供的文档。
答案 1 :(得分:2)
你正在重新发明轮子,以避免在Python 2.x中使用中间列表:
for k, v in d.iteritems():
print k, v
在Python 3.x中使用:
for k, v in d.items():
print(k, v)
因为该版本中的.items()
方法返回一个可迭代的view对象。