繁体   English   中英

使用列表从CVS文件创建字典

[英]Creating dictionary from CVS file using lists

我有一个csv文件,其中包含四列和多行,每行代表不同的数据,例如

OID DID HODIS BEAR

 1  34   67    98

我已经打开并阅读了csv文件,但是不确定如何将每一列变成一个键。 我相信我在代码中使用的以下格式最适合我正在创建的任务。

请看下面的代码,如果解释有点混乱,请谅解。 请注意,第1列中的#Values是我所坚持的,我不确定如何定义每列。

for line in file_2:
    the_dict = {}
    OID = line.strip().split(',')
    DID = line.strip().split(',')
    HODIS = line.strip().split(',')
    BEAR = line.strip().split(',')

    the_dict['KeyOID'] = OID
    the_dict['KeyDID'] = DID
    the_dict['KeyHODIS'] = HODIS
    the_dict['KeyBEAR'] = BEAR

    dictionary_list.append(the_dict)

print(dictionary_list)

图片

字符串有一个很棒的Python函数,它将基于定界符.split(delim)分割字符串,其中delim是定界符,并将它们作为列表返回。

从你在你的屏幕截图有代码,你可以使用下面的代码,以分割上, ,我以为是因为你说你的文件是一个CSV您的分隔符。

...
for line in file_contents_2:
    the_dict = {}
    values = line.strip().split(',')
    OID = values[0]
    DID = values[1]
    HODIS = values[2]
    BEAR = values[3]
...

此外,万一您需要根据空格分割字符串,这是.split()的默认参数(如果不提供任何参数,则使用默认参数)。

我会说整个代码:

lod = []
with open(file,'r') as f:
   l=f.readlines()
   for i in l[1:]:
      lod.append(dict(zip(l[0].rstrip().split(),i.split())))

split不需要参数,只需在with open使用简单的for循环,无需知道键

如果关心空字典,请执行以下操作:

lod=list(filter(None,lod))
print(lod)

输出:

[{'OID': '1', 'DID': '34', 'HODIS': '67', 'BEAR': '98'}]

如果要整数:

lod=[{k:int(v) for k,v in i.items()} for i in lod]
print(lod)

输出:

[{'OID': 1, 'DID': 34, 'HODIS': 67, 'BEAR': 98}]

另一种方法是使用像Pandas这样的库,该库在处理表格数据方面功能强大。 因为我们避免循环,所以速度很快。 在下面的示例中,您仅需要Pandas和CSV文件的名称。 我使用io只是将字符串数据转换为模拟csv。

import pandas as pd
from io import StringIO

data=StringIO('''
OID,DID,HODIS,BEAR\n
1,34,67,98''') #mimic csv file

df = pd.read_csv(data,sep=',')

print(df.T.to_dict()[0])

在底部,您只需要一个线性命令链。 阅读csv,转置并转换为字典:

import pandas as pd
csv_dict = pd.read_csv('mycsv.csv',sep=',').T.to_dict()[0]

暂无
暂无

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

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