简体   繁体   English

尝试从字典,Python获取值时出现keyError

[英]keyError when trying to get value from dictionary, Python

I can iterate and write to file with no problems in the second loop. 我可以在第二个循环中毫无问题地迭代并写入文件。 But in the third loop when I try to call a value I get 但是在第三个循环中,当我尝试调用一个值时,我得到了

R.write(str(dictList[s])+'\n')
KeyError: '<http://www.Department17.University9.edu/GraduateStudent72>'

Here is the code: 这是代码:

f = open('advisor', 'rw')
e = open('dictionary.txt', 'rw')
R = open ('encodedAdvisor.txt', 'w')

import re

dictList={'key':'val'}
for line1 in e:
    kv=line1.split(',')
    key=str(kv[1])  
    val=str(kv[0])
    dictList.update({key:val})
for k, v in dictList.iteritems():
    R.write(str(k)+':'+v+':'+'\n') 
for line2 in f:
    spo = re.findall(r'(<.*?>)', line2)
    s = str(spo[0].strip())
    o = str(spo[1].strip())
    R.write(str(dictList[s])+'\n')

advisor file : 顾问文件:

advisor(<http://www.Department17.University9.edu/GraduateStudent71>,<http://www.Department17.University9.edu/AssociateProfessor7>)
advisor(<http://www.Department5.University9.edu/GraduateStudent97>,<http://www.Department5.University9.edu/AssociateProfessor0>)
advisor(<http://www.Department3.University9.edu/GraduateStudent60>,<http://www.Department3.University9.edu/FullProfessor6>)
advisor(<http://www.Department17.University9.edu/GraduateStudent70>,<http://www.Department17.University9.edu/AssistantProfessor2>)
advisor(<http://www.Department9.University9.edu/UndergraduateStudent260>,<http://www.Department9.University9.edu/FullProfessor9>)
advisor(<http://www.Department3.University9.edu/GraduateStudent59>,<http://www.Department3.University9.edu/AssociateProfessor5>)

dictionary file : 字典文件:

GraduateStudent21158,<http://www.Department17.University9.edu/GraduateStudent66>
GraduateStudent21159,<http://www.Department17.University9.edu/GraduateStudent67>
GraduateStudent21160,<http://www.Department17.University9.edu/GraduateStudent68>
GraduateStudent21161,<http://www.Department17.University9.edu/GraduateStudent69>
GraduateStudent21162,<http://www.Department17.University9.edu/GraduateStudent7>
GraduateStudent21163,<http://www.Department17.University9.edu/GraduateStudent70>
GraduateStudent21164,<http://www.Department17.University9.edu/GraduateStudent71>
GraduateStudent21165,<http://www.Department17.University9.edu/GraduateStudent72>
GraduateStudent21166,<http://www.Department17.University9.edu/GraduateStudent73>
GraduateStudent21167,<http://www.Department17.University9.edu/GraduateStudent74>    

I think you have trailing spaces for each line in your dictionary file. 我认为您的字典文件中的每一行都有尾随空格。 I notice them when I select the text. 选择文本时会注意到它们。 If this is in your actual file, this will raise an error since the strings will not match during the key lookup. 如果这在您的实际文件中,这将引发错误,因为在关键字查找期间字符串将不匹配。 Try this: 尝试这个:

for line1 in e:
    line1 = line1.strip()
    ...

Otherwise, test that your expected keys are actually in dictList keys: 否则,测试您期望的键是否确实在dictList键中:

expected = "<http://www.Department17.University9.edu/GraduateStudent72>"
assert expected in dictList

If an exception is raised you can track down the differences with difflib . 如果引发异常,则可以使用difflib跟踪差异。 Any printed + or - will indicate the differences. 任何印刷的+-都将指示差异。 This should help you troubleshoot what's going on. 这应该可以帮助您解决正在发生的事情。

import difflib

actual = [k for k in dictList if "72" in k][0]
for i in difflib.ndiff(expected, actual):
    print(i, end="")

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM