作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在遍历和修改字典时遇到问题...
假设我有一本字典:
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: dictionary changed size during iteration'
第一次删除后。我也尝试过使用 iter(dict1.keys())
但得到了同样的错误。
因此我有点困惑,需要一些建议。谢谢
最佳答案
只需使用 .keys()
方法创建一个独立的键列表。
这是您的 Python 2.7 代码的工作版本:
>>> dict1 = {'A' : 'first', 'B' : 'second', 'C' : 'third', 'D' : 'fourth'}
>>> dict2 = {}
>>> for key in dict1.keys(): # this makes a separate list of keys
if key in ('A', 'B'):
dict2[key] = dict1[key]
elif key == 'C':
print 'Do this!'
else:
print 'Do something else'
del dict1[key]
Do this!
Do something else
>>> dict1
{}
>>> dict2
{'A': 'first', 'B': 'second'}
对于 Python 3,在 .keys()
周围添加 list() 并使用打印函数:
>>> dict1 = {'A' : 'first', 'B' : 'second', 'C' : 'third', 'D' : 'fourth'}
>>> dict2 = {}
>>> for key in list(dict1.keys()): # this makes a separate list of keys
if key in ('A', 'B'):
dict2[key] = dict1[key]
elif key == 'C':
print('Do this!')
else:
print('Do something else')
del dict1[key]
Do this!
Do something else
>>> dict1
{}
>>> dict2
{'A': 'first', 'B': 'second'}
关于python - 遍历和改变字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43506886/
我是一名优秀的程序员,十分优秀!