Python 更改字典的键

Python 更改字典的键,python,dictionary,Python,Dictionary,这是一个简单的练习,可以用不同的方法解决,我只是不知道为什么这不起作用。我从一个字典开始,然后我想把它的键改成大写,但这会引发一个错误------RuntimeError:字典在迭代过程中改变了大小 semana = {"Lunes": 4, "Martes": 5, "Miercoles": 5, "Jueves": 4, &q

这是一个简单的练习,可以用不同的方法解决,我只是不知道为什么这不起作用。我从一个字典开始,然后我想把它的键改成大写,但这会引发一个错误------RuntimeError:字典在迭代过程中改变了大小

semana = {"Lunes": 4,
           "Martes": 5,
           "Miercoles": 5,
           "Jueves": 4,
           "Viernes": 4,
           "Sabado": 4,
           "Domingo": 4}

for key, value in semana.items():
    semana[key.upper()] = value
    del semana[key]

问题是您试图在迭代字典时更改它。这会干扰迭代。相反,您需要创建一个新词典。您可以这样做:

new_dict = {}
for key, value in semana.items():
    new_dict[key.upper()] = value
您还可以使用理解创建新的dict:

new_dict = {key.upper(): value for key, value in semana.items()}

list(semana.items()):
也应该起作用,因为
items()
返回一个视图,但是是的,comp是一种方法。@ggorlen使用原始键而不是大写键创建元组列表。而
dict(semana.items())
会复制dict,但它会使用原始键而不是大写键。是的,我说的是保留OP的原始代码,只是在
items()
周围添加
list()
调用
for
循环。这不是一个好的解决方案,但它是解决问题的最简单的方法。@ggorlen哦,明白了-是的,这是有意义的。您正在更改正在迭代的字典。对于键,semana.copy()中的值。items():