[英]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.