Python - 将CSV转换为字典列表的方法

594 阅读3分钟

用三个步骤将CSV文件转换为Python字典的列表。

  • 使用open("my_file.csv") ,创建一个CSV文件对象f ,并在csv.DictReader(f) 方法中传递它。
  • 返回值是一个可迭代的字典,在CSV文件中每行一个。每个字典将第一行的列头映射到特定的行值。
  • 作为最后一步,使用 Python 内置的list() 函数将字典的可迭代性转换为一个列表。

接下来让我们看一下一个简单的例子来演示这个解决方案!

基本解决方案。CSV到字典列表 - 示例

下面是一个CSV文件的内容,"my_file.csv" ,用于我们下面的代码片断。

Name,Job,Age,Income
Alice,Programmer,23,110000
Bob,Executive,34,90000
Carl,Sales,45,50000

如果你把这个CSV文件以表格的形式显示出来,它看起来像这样。

名称工作年龄收入
爱丽丝程序员23110000
鲍勃行政人员3490000
卡尔销售人员4550000

下面是将CSV文件转换成字典列表的代码,通过使用csv.DictReader(file) 函数,每行一个字典

import csv


csv_filename = 'my_file.csv'

with open(csv_filename) as f:
    reader = csv.DictReader(f)

lst = list(*reader)

字典是一个数据结构,它将键映射到值。

前面的代码片断的结果是一个字典的列表。CSV的第一行被用作头,以确定被映射到CSV文件各行中定义的值的字典的键。

[{'Name': 'Alice', 'Job': 'Programmer', 'Age': '23', 'Income': '110000'}{'Name': 'Bob', 'Job': 'Executive', 'Age': '34', 'Income': '90000'}{'Name': 'Carl', 'Job': 'Sales', 'Age': '45', 'Income': '50000'}]

csv.DictReader(f) 方法需要一个文件对象f 作为输入参数。因此,你首先需要使用内置的Python [open()](https://blog.finxter.com/python-open-function/)函数打开。

🪲 注意:一个常见的错误是把文件名作为一个字符串来传递--但这不起作用! 方法希望有一个文件对象作为必要参数。csv.DictReader(f)

单行式解决方案。CSV 到 Dicts 列表

那么,我们能不能在 Python 的一行中把 CSV 转换为字典列表呢?

当然,我们可以!

这里的单行代码完成了与前面讨论的代码相同的内容。

import csv; lst = list(*csv.DictReader(open('my_file.csv')))

💡 解释一下。我们导入 模块,使用csv 分号 ; 将两个语句打包在一行中,将 ,* csv.DictReader() 输出的所有行作为参数解压[list()](https://blog.finxter.com/python-list/)内置函数。

结果被存储在变量lst 中,该变量现在持有与之前相同的列表。

[{'Name': 'Alice', 'Job': 'Programmer', 'Age': '23', 'Income': '110000'}{'Name': 'Bob', 'Job': 'Executive', 'Age': '34', 'Income': '90000'}{'Name': 'Carl', 'Job': 'Sales', 'Age': '45', 'Income': '50000'}]

下面是一个类似的替代方案,但也是在一行中打印列表--现在解包发生在括号内的符号[]

import csv; lst=[*csv.DictReader(open('my_file.csv'))]; print(lst)

输出是一个字典列表,在原始CSV中每行(非标题)一个。

[{'Name': 'Alice', 'Job': 'Programmer', 'Age': '23', 'Income': '110000'},  {'Name': 'Bob', 'Job': 'Executive', 'Age': '34', 'Income': '90000'},  {'Name': 'Carl', 'Job': 'Sales', 'Age': '45', 'Income': '50000'}]