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

2024-10-03 23:25:28 发布

您现在位置:Python中文网/ 问答频道 /正文

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

OID DID HODIS BEAR

 1  34   67    98

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

请看我下面的代码,如果解释有点混乱,对不起。 请注意,第1列中的#值是我一直坚持的,我不确定如何定义每一列。你知道吗

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


Tags: 文件csvthe代码dictionaryline代表dict
3条回答

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中使用simple 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这样的库,它在处理表格数据方面非常强大。它很快,因为我们避免循环。在下面的示例中,您只需要熊猫和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]

相关问题 更多 >