[英]Convert CSV file to a dictionary of lists
我的 csv 文件如下所示:
Name,Surname,Fathers_name
Prakash,Patel,sudeep
Rohini,Dalal,raghav
Geeta,vakil,umesh
我想创建一个列表字典,应该是这样的:
dict = {Name: [Pakash,Rohini,Geeta], Surname: [Patel,Dalal,vakil], Fathers_name: [sudeep,raghav,umesh]}
这是我的代码:
with open(ram_details, 'r') as csv_file:
csv_content = csv.reader(csv_file,delimiter=',')
header = next(csv_content)
if header != None:
for row in csv_content:
dict['Name'].append(row[0])
它抛出密钥不存在的错误? 另外,是否有更好的方法来获得所需的 output?!! 有人可以帮我弄这个吗?
您的代码看起来不错。 它应该可以工作,但如果您遇到任何麻烦,您始终可以使用defaultdict 。
from collections import defaultdict
# dict = {'Name':[],'Surname':[],'FatherName':[]}
d = defaultdict(list)
with open('123.csv', 'r') as csv_file:
csv_content = csv.reader(csv_file,delimiter=',')
header = next(csv_content)
if header != None:
for row in csv_content:
# dict['Name'].append(row[0])
# dict['Surname'].append(row[1])
# dict['FatherName'].append(row[2])
d['Name'].append(row[0])
d['Surname'].append(row[1])
d['FatherName'].append(row[2])
请不要命名类似于 function 或类型(例如dict
)中的构建的变量。
问题是您还没有初始化字典 object。 因此,您尝试将键和值添加到 object 中,这还不知道是dict
。 在任何情况下,您都需要执行以下操作:
result = dict() # <-- this is missing
result[key] = value
由于您想创建一个字典并希望直接将 append 添加到它,您也可以使用 python 的defaultdict 。
一个工作示例是:
import csv
from collections import defaultdict
from pprint import pprint
with open('details.csv', 'r') as csv_file:
csv_content = csv.reader(csv_file, delimiter=',')
headers = list(map(str.strip, next(csv_content)))
result = defaultdict(list)
if headers != None:
for row in csv_content:
for header, element in zip(headers, row):
result[header].append(element)
pprint(result)
这导致 output:
defaultdict(<class 'list'>,
{'Fathers_name': ['sudeep', 'raghav', 'umesh'],
'Name': ['Prakash', 'Rohini ', 'Geeta '],
'Surname': ['Patel ', 'Dalal ', 'vakil ']})
注意 1) 我的 csv 文件有一些额外的尾随空格,可以使用strip()
删除,就像我对headers
所做的那样。
注 2)我正在使用zip function 同时遍历元素和标题(这样我就不用索引行了)。
可能的替代方法是使用 pandas to_dict
方法( 文档)
您可以尝试使用 pandas 来实现:
import pandas as pd
f = pd.read_csv('todict.csv')
d = f.to_dict(orient='list')
或者,如果您喜欢单衬垫:
f = pd.read_csv('todict.csv').to_dict('orient='list')
首先,您将 csv 文件读取到 pandas 数据框(我将您的样本保存到名为 todict.csv 的文件中)。 然后使用dataframe to dict 方法转换为字典,指定您希望列表作为字典值,如文档中所述。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.