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}')