加载CSV以在数组/字典/列表中搜索匹配项

时间:2016-09-16 18:40:14

标签: python list python-2.7 csv dictionary

Python的新手,我现在正在学习编写一个程序来处理来自多个文本文件的前几行的数据。到目前为止一直很好 - 获取数据并重新格式化输出。

现在我想根据它在csv文件中的行来更改一个输出字段的格式。该文件是15行,列数可变。

这个想法是:

  1. 我预加载了CSV文件 - 我想将其硬编码到列表或字典中 - 不确定哪种方法可以更好地用于下一步。
  2. 通过列表/词典中的15行,如果找到匹配项,请将输出设置为同一行中的第1列。
  3. 示例数据:

    BIT, BITSIZE, BITM, BS11, BIT, BS4, BIT1, BIT_STM
    CAL, ID27, CALP, HCALI, IECY, CLLO, RD2, RAD3QI, ID4
    DEN, RHO8[1], RHOZ1, RHOZ2, RHOB_HR, RHOB_ME, LDENX
    DENC, CRHO, DRHO1, ZCOR2, HDRH2, ZCORQK
    DEPT, DEPTH, DEPT,MD
    DPL, PDL, PORZLS1, PORDLSH_Y, DPRL, HDPH_LIM, PZLS
    DPS, HDPH_SAN1, DPHI_SAN2, DPUS, DPOR, PZSS1
    DTC, DTCO_MFM[1], DT4PT2, DTCO_MUM[1], DTC
    DTS, DT1R[1], DTSH, DT22, DTSM[1], DT24S
    GR, GCGR, GR_R3, HGR3, GR5, GR6, GR_R1, MGSGR
    NPL, NEU, NPOR_LIM, HTNP_LIM, NPOR, HNPO_LIM1
    NPS, NPRS, CNC, NPHILS, NPOR_SS, NPRS1, CNCS, PORS
    PE, PEFZ_2, HPEF, PEQK, PEF81, PEF83, PEDN, PEF8MBT
    RD, AST90, ASF60, RD, RLLD, RTCH, LLDC, M2R9, LLHD
    RS, IESN, FOC, ASO10, MSFR, AO20, RS, SFE, LL8, MLL
    

    例如:

    BIT, BITSIZE, BITM, BS11, BIT, BS4, BIT1, BIT_STM
    

    返回BIT

    问题:

    • 列表或字典是否更适合搜索速度?
    • 如果我使用csv模块加载数据,那么每行的列数是否相同都很重要?
    • 有没有办法在不使用循环的情况下搜索列表或字典?

    我尝试加载到列表并搜索:

    import csv
    with open('lookup.csv', 'rb') as f:
        reader = csv.reader(f)
        codelist = list(reader)
    

    这是否适用于搜索匹配代码searchcode

    for subcodes in codelist:
        if searchcode in subcodes:
            print "Found it!", subcodes[0]
            break
    

2 个答案:

答案 0 :(得分:0)

我认为你应该尝试使用二维字典

new_dic = {}
new_dic[0] = {BIT, BITSIZE, BITM, BS11, BIT, BS4, BIT1, BIT_STM}
new_dic[1] = {CAL, ID27, CALP, HCALI, IECY, CLLO, RD2, RAD3QI, ID4}

然后你可以搜索元素并打印出来。

答案 1 :(得分:0)

您可以使用“index”搜索列表中的项目。如果列表中有该项,它将返回第一次出现的位置。

my_list = ['a','b','c','d','e','c'] # defines the list
copy_at = my_list.index('b') # checks if 'b' is in the list
copy_at # prints the location in the list where 'b' was at
1
copy_at = my_list.index('c')
copy_at
2
copy_at = my_list.index('f')
Traceback (most recent call last):
  File "<pyshell#25>", line 1, in <module>
    my_list.index('f')
ValueError: 'f' is not in list

你可以通过“尝试”“除外”来捕捉错误并继续搜索。