2

我有一本字典'mydict'。

{   'a': ['xyz1', 'xyz2'],
    'b': ['xyz3', 'xyz4'],
    'c': ['xyz5'],
    'd': ['xyz6']}

我正在尝试使用以下代码打印出该字典的所有键和值:

for username, details in mydict.iteritems():
    pprint.pprint(username + " " + details)

但是,我收到以下错误:

AttributeError: 'list' object has no attribute 'iteritems'

任何帮助,将不胜感激。

4

2 回答 2

1

此代码适用于您的示例

>>> import pprint
>>> mydict = {   'a': ['xyz1', 'xyz2'],
    'b': ['xyz3', 'xyz4'],
    'c': ['xyz5'],
    'd': ['xyz6']}

>>> for username, details in mydict.iteritems():
        pprint.pprint((username, details))


('a', ['xyz1', 'xyz2'])
('c', ['xyz5'])
('b', ['xyz3', 'xyz4'])
('d', ['xyz6'])
于 2013-04-04T08:08:24.850 回答
-1

当我尝试原始时,我得到相同的 AttributeError,这是因为每个 KEY 中的 VALUE,VALUE 对是一个列表。

使用 mydict.items() 您可以创建每个 (KEY, VALUE) 对的副本,然后您可以打印:

for key, value in mydict.items():
    print((key, value))

当然,如果您的字典很大,使用 items() 创建副本会占用大量内存。哪一个是能够使用 iteritems() 遍历字典的最大优势(更低的内存成本、更高效的和*为 python优化的 *)。

同样,您可以执行以下操作:

for key in d:
    print((k, mydic[key]))

但是(在python中),这又慢了!因为每次查找时都必须重新散列字典mydict[key]。因此,似乎 mydict.items() 是这里的最佳选择,因为它使您可以通过元组解包直接访问值。

Raymond Hettinger(来自 Python 的迭代器和生成器专家)在 US PyCon 上做了一场精彩的演讲,你可以在这里观看:http: //pyvideo.org/video/1780/transforming-code-into-beautiful-idiomatic-pytho

于 2013-04-04T08:30:49.360 回答