如何使一行中的最后一项成为字典的键,并将前面的项目保存为列表

问题描述

我正在努力从 CSV 中读取行并将它们分类到多个不同的字典中。

ABW,Latin America & Caribbean,High income,Aruba

CSV 的每一行中有四个示例值。我希望 Aruba 是键,前三个保存为字典值的列表。

with open(filename,mode='r') as csv_file:
            line_count = 0
            for line in csv.DictReader(csv_file,("country code","region","income","name")):
                print(line)

我不确定如何使用 DictReader 来实现这一目标。上面的代码正确地将所有内容分类到这些键中,但我不知道如何指定最终它们键的值以及进入列表的值。

Aruba: ['ABW','Latin America & Caribbean','High income']

这就是我希望它最终看起来的样子。

解决方法

你可以这样做:

  1. 创建一个空字典 your_data={};
  2. 使用 csv.reader 读取该行,它将一行中的数据项列表返回为 row;
  3. 使用 your_data[row[-1]]=row[0:-1] 在您的字典中创建条目。

所以,像这样(未经测试...):

with open(filename,mode='r') as csv_file:
            line_count = 0
            your_data={}
            reader=csv.reader(csv_file)
            for row in reader:
                your_data[row[-1]]=row[0:-1]
,

您可以使用 Pandas 轻松完成,例如: (这是 Convert a Pandas DataFrame to a dictionary 的灵感)

import pandas as pd
#header and names args depend of your csv file
df=pd.read_csv(filename,header=0,names=["country code","region","income","name"] 
  

dico=df.set_index('name').T.to_dict('list')
,

这将是实现您所寻找的一种方式

dic = {}
with open('csvfile1.csv',mode='r') as csv_file:
            for line in csv_file:
                line = line.rstrip().split(',')
                dic[line[-1:][0]] = line[:-1]