如何更改词典';在Python中使用方法Pop?

如何更改词典';在Python中使用方法Pop?,python,dictionary,Python,Dictionary,嗯,我有一本字典,它存储从PDF文件中提取的信息。 像这样: {'B)姓名:':'Jair','H)年龄:':'25','J)性别:'Male'} 我试图通过使用以下代码排除来自PDF的字符串“b”和“h”以及“j”),来“清理”这本词典: for k in mydict: mydict[(k.split(')')[1])] = mydict.pop(k) 但这段代码不起作用:“IndexError:列表索引超出范围” 我不明白为什么,因为当我用print运行代码时,pop一切都很顺利:

嗯,我有一本字典,它存储从PDF文件中提取的信息。 像这样:

{'B)姓名:':'Jair','H)年龄:':'25','J)性别:'Male'}

我试图通过使用以下代码排除来自PDF的字符串“b”和“h”以及“j”),来“清理”这本词典:

for k in mydict:
  mydict[(k.split(')')[1])] = mydict.pop(k)
但这段代码不起作用:“IndexError:列表索引超出范围”

我不明白为什么,因为当我用print运行代码时,pop一切都很顺利:

for k in mydict:
        print(k.split(')')[1])

我应该更改什么?

您不能在迭代字典的同时向字典中添加元素或从字典中删除元素。你两者都在做。你最好是这样做:

new_dict = {}
for key, value in mydict.items():
    new_dict[k.split(')')[1]] = value
mydict = new_dict
如果您对词典理解感到满意:

mydict = {k.split(')')[1]: value for key, value in mydict.items()}
它创建一个新词典,然后将其分配给mydict

d = { 'B) NAME:': 'Jair', 'H) AGE: ': ' 25', 'J) Gender': 'Male'}
一个简单的基于正则表达式的dict理解解决方案(创建新的dict)

您还可以使用下面的代码块(在try/except中捕获运行时错误)来更改现有dict

for k in d.keys():
    new_key = re.findall(".*\)\s(.*)", k)[0]
    d[new_key] = d[k]
    del d[k]

您的第一个代码段运行良好,我没有收到那个错误。你最终会得到不可预测的结果。我能够在没有任何错误的情况下运行有问题的代码,是吗?请参阅上面的注释。在对对象进行变异时,不会对其进行迭代。好的,谢谢,但我的问题是我没有得到OP-get的错误,为什么会这样?@python\u learner。文件上说这是不可预测的。它可能会做正确的事情。它可能会导致运行时错误。它可能无法迭代某些项。因为一本小词典能用,并不意味着它能用在一本大词典上。因为它可以在一个版本的Python中工作,所以它不能在每个版本的Python中工作。参见
iter(dictview)
下的内容。
for k in d.keys():
    new_key = re.findall(".*\)\s(.*)", k)[0]
    d[new_key] = d[k]
    del d[k]