gpt4 book ai didi

python - 遍历和改变字典

转载 作者:行者123 更新时间:2023-11-28 22:28:35 28 4
gpt4 key购买 nike

我在遍历和修改字典时遇到问题...

假设我有一本字典:

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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com