【问题标题】:KeyError 43L in pythonpython中的KeyError 43L
【发布时间】:2015-11-21 10:25:49
【问题描述】:

我想为另一个字典中的字典分配一个列表,但我得到一个键错误 你可以在这里找到文件 https://www.dropbox.com/s/9n35b41rzuxjkk8/plan1.txt?dl=0

Code, Title, Lec, Lab, Cr, Prereq, Year, Semester

ARAB110 ,  Arabic Language Skills I ,  3 ,  0 , 3,  - ,  1 ,  1 
CHEMY101 ,  General Chemistry I ,  3 ,  3 , 4,  - ,  2 ,  2 
ENGL154 ,  Language Development I ,  3 ,  0 , 3,  - ,  1 ,  1 
ENGL155 ,  Language Development II ,  3 ,  0 , 3,  ENGL154 ,  1 ,  2 
ENGL219 ,  Technical Report Writing ,  3 ,  0 , 3,  ENGL155 ,  2 ,  1 

我想为每年创建一个字典,并且在每年的内部每个学期的字典都包含本学期所有代码的列表

curri = read_csv('senior_data/plan1.txt')
curri = curri.sort([' Year',' Semester '],ascending=[1,1]) 

cur = {}
cur['1']={}
cur['2']={}
cur['3']={}
cur['4']={}

cur['1']['1'] = {}
cur['1']['2'] = {}
cur['2']['1'] = {}
cur['2']['2'] = {}
cur['3']['1'] = {}
cur['3']['2'] = {}
cur['3']['3'] = {}
cur['4']['1'] = {}
cur['4']['2'] = {}


i=0
c_list = []
for xxx in cur:
    for y in cur[xxx]:
        print (xxx+" "+y)
        for row in curri.iterrows():
            if(str(curri[' Year'][i]) == xxx and str(curri[' Semester '][i] == y)):   
                print (xxx+":"+y+ curri['Code'][i])
                c_list.append(curri['Code'][i])
            i=i+1
            cur[xxx][y] = c_list
            c_list = []

当我删除第三个循环时,它工作正常!

这是输出:

1 1
1:1 ARAB110 
1:1 ENGL154 
1:1 ENGL155 
1:1 ISLM101 
1:1 ITCS101 
1:1 ITCS102 
1:1 MATHS101 
1:1 MATHS102 
1:1 PHYCS101 
1:1 PHYCS102 
1 2

错误是

KeyError: 42L

---> 24             if(str(curri[' Year'][i]) == xxx and str(curri[' Semester ']

【问题讨论】:

  • element in seqence 给你的是元素,而不是索引,你知道吗?使用调试器或输出值以找出与预期不符的确切位置。另外,请引用完整的错误信息,不要在标题中添加标签,它们应该保持独立。
  • 请粘贴您收到的错误回溯,因为您的代码不完整,我们无法运行它。
  • 我只能获取第一个xxx和第一个y的元素
  • 1 1 1:1 ARAB110 1:1 ENGL154 1:1 ENGL155 1:1 ISLM101 1:1 ITCS101 1:1 ITCS102 1:1 MATHS101 1:1 MATHS102 1:1 PHYCS101 1:1 PHYCS102 1 2
  • 您的代码 sn-p 给出此错误消息:NameError: name 'curri' is not defined。请粘贴导致错误的完整代码。

标签: python dictionary keyerror


【解决方案1】:

i 的增量应该发生在最内部的循环中。

假设这些行是字典,这可以工作:

c_list = []
for xxx in cur:
    for y in cur[xxx]:
        print (xxx+" "+y)
        for row in curri.iterrows():
            if(str(row[' Year']) == xxx and str(row[' Semester '] == y)):   
                print (xxx+":"+y+ row['Code'])
                c_list.append(row['Code'])
            cur[xxx][y] = c_list
            c_list = []

如果不试试这个:

c_list = []
for xxx in cur:
    for y in cur[xxx]:
        print (xxx+" "+y)
        i = 0
        for row in curri.iterrows():
            if(str(curri[' Year'][i]) == xxx and str(curri[' Semester '][i] == y)):   
                print (xxx+":"+y+ curri['Code'][i])
                c_list.append(curri['Code'][i])
            i=i+1
            cur[xxx][y] = c_list
            c_list = []

在 Python 中,通常不需要手动增加索引:

c_list = []
for xxx in cur:
    for y in cur[xxx]:
        print (xxx+" "+y)
        for i, row in enumerate(curri):
            if(str(curri[' Year'][i]) == xxx and str(curri[' Semester '][i] == y)):   
                print (xxx+":"+y+ curri['Code'][i])
                c_list.append(curri['Code'][i])
            cur[xxx][y] = c_list
            c_list = []  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    • 2018-10-10
    • 2022-01-21
    • 2020-12-27
    相关资源
    最近更新 更多