繁体   English   中英

将 CSV 文件转换为列表字典

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

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