Python 迭代defaultdict字典的键和值

Python 迭代defaultdict字典的键和值,python,dictionary,iterator,Python,Dictionary,Iterator,以下工作如预期: 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)) 与: 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 TypeError:“int”对象不可编辑 为什么??如何

以下工作如预期:

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))
与:

回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:“int”对象不可编辑

为什么??如何修复它?

您需要迭代dict.iteritems():

更新:在py3 V3.6中+

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

如果您使用的是Python 3.6

from collections import defaultdict

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

如果要迭代单个集合上的单个项,请执行以下操作:

from collections import defaultdict

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

你到底想完成什么?你是在什么背景下做这件事的?你的两个例子根本不具有可比性。一个是列表,另一个是字典?你在问什么?是的,我忽略了第一个是列表;)谢谢但是,为什么它与隐式创建的字典一起工作?这些不一致/实现差异吗?@gf您的第一个示例是列表,而不是字典。python的哪个版本?我是不是错过了一个重要环节?当我尝试在d.iteritems()中为I使用iteritems`d=defaultdict(list)时出错:AttributeError:'collections.defaultdict'对象没有属性'iteritems'`@adam答案将其作为注释-现在是d.items(),而不是d.iteritems()。
from collections import defaultdict

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

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