迭代一个值为列表的字典

时间:2013-04-04 08:05:48

标签: python dictionary

我有一本字典'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'

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分: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'])

答案 1 :(得分:-1)

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

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

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

当然,如果您的字典很大,使用items()创建副本的内存很昂贵。哪个是能够使用iteritems()的最大优势(更低的内存成本,更高效率和 * 优化 for python *)遍历你的字典。

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

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

但是(在python中),这又慢了!因为每次查找mydict[key]时都必须重新哈希字典。所以,mydict.items()似乎是最好的选择,因为它可以让你直接通过元组解包来访问这些值。

Raymond Hettinger(来自Python的iteritems和生成器大师)在美国PyCon上发表了精彩的演讲,你可以在这里观看:http://pyvideo.org/video/1780/transforming-code-into-beautiful-idiomatic-pytho