【问题标题】:Load CSV to search for match in array/dictionary/list加载 CSV 以在数组/字典/列表中搜索匹配项
【发布时间】:2017-01-25 01:50:54
【问题描述】:

对 Python 非常陌生,我现在正在尝试编写一个程序来处理来自多个文本文件的前几行的数据。到目前为止一切顺利 - 获取数据并重新格式化以输出。

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

这个想法是:

  1. 我预加载了 CSV 文件 - 我想将其硬编码到列表或字典中 - 不确定下一步哪个更适合。
  2. 遍历列表/字典中的 15 行,如果找到匹配项 - 将输出设置为同一行的第 1 列。

示例数据:

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

【问题讨论】:

    标签: python list python-2.7 csv dictionary


    【解决方案1】:

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

    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}
    

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

    【讨论】:

    • 我还可以使用 csv 模块来加载字典吗?搜索循环代码会以同样的方式工作吗?
    • @dbmitch 我想是的,试试吧!
    • 为什么这比使用列表更好?
    • @dbmitch 我认为是一样的,你可以用这个docs.python.org/3/library/timeit.html时间执行来衡量
    【解决方案2】:

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

    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
    

    您可以使用“try”“except”来捕获错误并继续搜索。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-16
      • 2017-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-03
      相关资源
      最近更新 更多