遍历defaultdict字典的键和值

58

以下内容按预期工作:

d = [(1,2), (3,4)]
for k,v in d:
  print "%s - %s" % (str(k), str(v))

但是这个失败了:

d = collections.defaultdict(int)
d[1] = 2
d[3] = 4
for k,v in d:
  print "%s - %s" % (str(k), str(v))

使用:

Traceback (most recent call last):  
 File "<stdin>", line 1, in <module>  
TypeError: 'int' object is not iterable 

为什么?我该如何修复它?


你究竟想要实现什么?你在什么背景下进行这个操作? - dlamotte
1
你的两个例子根本不可比较。一个是列表,另一个是字典?你在问什么? - S.Lott
是的,我忽视了第一个是一个列表 ;) - Georg Fritzsche
3个回答

100

你需要迭代 dict.iteritems()

for k,v in d.iteritems():               # will become d.items() in py3k
  print "%s - %s" % (str(k), str(v))

更新:在Python 3.6以上的版本中

for k,v in d.items():
  print (f"{k} - {v}")

谢谢。但是,为什么它可以使用隐式创建的字典工作呢?这些不一致性或实现差异是怎么回事? - Georg Fritzsche
11
你的第一个例子是列表,不是字典。 - Daniel Stutzbach
2
Python的哪个版本?我是否漏掉了一个导入? 当我尝试使用iteritems时出现错误` d = defaultdict(list)for i in d.iteritems(): AttributeError: 'collections.defaultdict'对象没有'iteritems'属性 ` - Adam Mendoza
17
现在,答案已经以注释的形式提供了 - 现在应该是使用 d.items() 而不是 d.iteritems()。 - Peteris

26

如果您正在使用Python 3.6

from collections import defaultdict

for k, v in d.items():
    print(f'{k} - {v}')

3

如果您想遍历单个集合中的每个项目:

from collections import defaultdict

for k, values in d.items():
    for value in values:
       print(f'{k} - {value}')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接