【发布时间】:2017-09-16 08:12:06
【问题描述】:
我在遍历和修改字典时遇到了问题...
假设我有一本字典:
dict1 = {'A' : 'first', 'B' : 'second', 'C' : 'third', 'D' : 'fourth'}
我想遍历 dict1,使用其中的数据构建第二个字典。完成dict1 中的每个条目后,我将其删除。
在伪代码中:
dict2 = {}
for an entry in dict1:
if key is A or B:
dict2[key] = dict1[key] # copy the dictionary entry
if key is C:
do this...
otherwise:
do something else...
del dict1[key]
我知道在循环中改变可迭代对象的长度会导致问题,而上述实现可能并不简单。
this question 这个问题的答案似乎表明我可以使用keys() 函数,因为它返回一个动态对象。我因此尝试过:
for k in dict1.keys():
if k == A or k == B:
dict2[k] = dict1[k]
elif k == C:
dothis()
else:
dosomethingelse()
del dict1[k]
但是,这只是给出:
'RuntimeError: 迭代期间字典大小改变'
在第一次删除之后。我也尝试过使用iter(dict1.keys()),但遇到了同样的错误。
因此我有点困惑,可以提出一些建议。谢谢
【问题讨论】:
-
循环结束时,dict1 似乎总是为空。那么,当您完成循环后,是否可以通过简单地覆盖 dict1 来解决问题?
-
遍历
list(dict1.keys())但是为什么必须一个一个地删除键呢?循环后只需dict1.clear()。
标签: python dictionary