Python从列表中删除项目以作为列添加到列表中

时间:2015-04-02 14:03:22

标签: python list dictionary indexing compare

我有两组数据。两者都有一些13000行,其中一行(我在主函数中打开为csv),有两列我需要匹配到另一个文件(打开为文本文件并放入example_05()函数中的词典列表中。

它们来自同一个源,我需要确保在为dicts列表中的每一行添加最后两个参数时数据保持不变,因为我在.csv文件中有大约20个额外的行,我' m添加到dicts列表,所以我必须在.csv文件中有额外或空数据。

要删除这些异常行,我试图将.csv文件中Q *值列表的索引与字典列表中字典中的{'Q*':}值进行比较(每个字典是一个row)寻找不匹配因为它们应该是相同的然后只是在我将它添加到字典列表之前从mass_list中删除该项,就像我在example_05()函数末尾那样。

当我尝试比较它们时,我在此行收到“IndexError: list index out of range”错误:

if row10['Q*'] != Q_list_2[check_index]:

有人可以告诉我为什么吗?这是example_05()和主要功能:

def example_05(filename):


    with open(filename,'r') as file : data = file.readlines()
    header, data = data[0].split(), data[1:] 

    #...... convert each line to a dict, using header words      keys   
    global kept 
    kept = []

    for line in data :
        line = [to_float(term) for term in line.split()]
        kept.append( dict( zip(header, line) ) )

    del mass_list[0]
    mass_list_2 = [to_float(j) for j in mass_list]

    del Q_list[0]
    Q_list_2 =  [to_float(k) for k in Q_list]

    print "Number in Q_list_2 list = "
    print len(Q_list_2) 

    check_index = 0 
    delete_index = 0   
    for row10 in kept:
        if row10['Q*'] != Q_list_2[check_index]:
            del mass_list_2[delete_index]
            del Q_list_2[delete_index]
            check_index+=1
            delete_index+=1
        else:
            check_index+=1
            delete_index+=1
            continue

    k_index=0
    for d in kept:
        d['log_10_m'] = mass_list_2[k_index]
        k_index+=1     

    print "Number in mass_list_2 list = "
    print len(mass_list_2)    


if __name__ == '__main__' :
    f = open('MagandMass20150401.csv')
    csv_f = csv.reader(f)

    mag_list = []
    mass_list = []
    Q_list = []

    for row in csv_f:
        mag_list.append(row[17])
        mass_list.append(row[18])
        Q_list.append(row[15])

    del csv_f    
    f.close()

    example_05('summ20150401.txt')

0 个答案:

没有答案