为什么在python中迭代一个字典时必须调用.iteritems()?

问题:

为什么要调用iteritems()来迭代字典中的键值?即

dic = {'one':'1', 'two':'2'}
for k, v in dic.iteritems():
    print k, v

为什么不是迭代字典的默认行为

for k, v in dic:
    print k, v

回答:

对于每个python容器C,期望是这样

for item in C:
    assert item in C

将通过正常 – 如果in(循环子句)的意义与其他意义(存在检查)有完全不同的意义,那么you是否会发现令人惊讶?我肯定会!它自然地用于列表,集合,元组,…的方式
那么,当C是一个字典时,如果infor循环中产生键/值元组,那么按照最不惊讶的原则,in也必须采用这样一个元组左侧操作数在遏制检查中。
这有多有用?实际上没有用,基本上if (key, value) in Cif C.get(key) == value的同义词,这是我相信我可能已经执行或想要执行的检查比if k in C实际上means少了100倍的关键only,完全忽略了价值。
另一方面,想要在键上循环是很常见的,例如:

for k in thedict:
    thedict[k] += 1

有价值也不会有帮助的:

for k, v in thedict.items():
    thedict[k] = v + 1

实际上有些不太清楚,不太简洁。 (请注意,items是使用“正确”方法获取键/值对的原始拼写:不幸的是,在这些访问者返回整个列表的日子里,为了支持“只是迭代”一个替代拼写,要引入,iteritems是在Python 3中,其中与以前的Python版本的向后兼容性约束被削弱,它再次成为items)。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Why do you have to call .iteritems() when iterating over a dictionary in python?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

89 − 83 =