如何更改词典';在Python中使用方法Pop?
嗯,我有一本字典,它存储从PDF文件中提取的信息。 像这样: {'B)姓名:':'Jair','H)年龄:':'25','J)性别:'Male'} 我试图通过使用以下代码排除来自PDF的字符串“b”和“h”以及“j”),来“清理”这本词典:如何更改词典';在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一切都很顺利:
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]