Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 运行时错误:在迭代过程中字典更改了大小-如何解决?_Python_Pandas_Dictionary - Fatal编程技术网

Python 运行时错误:在迭代过程中字典更改了大小-如何解决?

Python 运行时错误:在迭代过程中字典更改了大小-如何解决?,python,pandas,dictionary,Python,Pandas,Dictionary,我试图遍历字典,如果所有键都是字符串,则将它们大写。我得到一个运行时错误: for k, v in ref_dict.items(): if isinstance(k, str): ref_dict[k.upper()] = v else: ref_dict[k] = v 我如何避免这样的事情?或者,更好的是,如何改进代码以更优雅地解决此问题?您的dict有多大?如果不是很大,那么你可以: new_dict = {} for k, v in re

我试图遍历字典,如果所有键都是字符串,则将它们大写。我得到一个运行时错误:

for k, v in ref_dict.items():
    if isinstance(k, str):
        ref_dict[k.upper()] = v
    else:
        ref_dict[k] = v

我如何避免这样的事情?或者,更好的是,如何改进代码以更优雅地解决此问题?

您的dict有多大?如果不是很大,那么你可以:

new_dict = {}
for k, v in ref_dict.items():
    if isinstance(k, str):
        new_dict[k.upper()] = v
    else:
        new_dict[k] = v

ref_dict = new_dict
在另一种情况下,您可能需要查看
ref_dict
的创建并在此处修改键

此外,还可以按如下方式修改原始代码更改
ref\u dict
。但值得一提的是,它将为
ref\u dict
添加新元素。比如说

ref_dict = {'abc' : 1}

### change of code
keys = [k for key in ref_dict]

for k in keys:
    if isinstance(k, str):
        ref_dict[k.upper()] = ref_dict[k]
    # else part is not neccessary
    # else:
    #     ref_dict[k] = v

# now ref_dict = {'abc':1, 'ABC':1}

我通过这样做解决了这个问题:

final_dict = dict((str(k).upper(), v) for k, v in ref_dict.items())
return final_dict

str
应用程序并不理想,但现在就可以了

这可能是我的建议,采用更好的python风格。您可以在ref\u dict.items()中对k,v执行
final\u dict=dict((k.upper(),v),如果是instance(k,str),则执行其他(k,v)操作。
@quanghaang beautifuly。这太完美了!非常感谢。