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

时间:2018-10-16 02:09:42

标签: python list dictionary pycharm

我有一个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)

image

3 个答案:

答案 0 :(得分:0)

有一个很棒的用于字符串的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()的默认参数(当不提供任何参数时使用默认参数)。

答案 1 :(得分:0)

我可以这样说:

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}]

答案 2 :(得分:0)

另一种实现方法是使用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]