制作一个简单的Python字典生成器

时间:2012-09-04 19:56:31

标签: python dictionary generator

这是一个基本上进行迭代的示例代码。

>>> 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个项目),那就没有内存效率。

但由于字典不是有序结构,我认为获取密钥列表是必须的。

有人可能会争辩说:键的数量远小于计算键和值的项目数。

有什么建议吗?或者更好的方式(当然我需要支持嵌套迭代,但这是另一回事)。

2 个答案:

答案 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对象。