gpt4 book ai didi

python - 将 CSV 值读入列表字典的大多数 Pythonic 方式

转载 作者:太空狗 更新时间:2023-10-29 21:46:25 24 4
gpt4 key购买 nike

我有一个 CSV 文件,其标题位于数据列的顶部,如下所示:

a,b,c
1,2,3
4,5,6
7,8,9

我需要在列表字典中阅读它:

desired_result = {'a': [1, 4, 7], 'b': [2, 5, 8], 'c': [3, 6, 9]}

使用 DictReader 阅读本文时我正在使用嵌套循环将项目附加到列表中:

f = 'path_to_some_csv_file.csv'
dr = csv.DictReader(open(f))
dict_of_lists = dr.next()
for k in dict_of_lists.keys():
dict_of_lists[k] = [dict_of_lists[k]]
for line in dr:
for k in dict_of_lists.keys():
dict_of_lists[k].append(line[k])

第一个循环将字典中的所有值设置为空列表。下一个循环遍历从 CSV 文件中读取的每一行,DictReader 从中创建键值字典。内部循环将值附加到与相应键匹配的列表中,因此我得到了所需的字典列表。我最终不得不经常写这篇文章。

我的问题是,是否有更 Pythonic 的方式使用没有嵌套循环的内置函数来执行此操作,或者更好的习惯用法,或者存储此数据结构的替代方法,以便我可以通过查询返回可索引列表用 key ?如果是这样,还有一种方法可以格式化列预先摄取的数据吗?

最佳答案

根据您要存储的数据类型以及是否可以使用 numpy,一个好的方法是使用 numpy.genfromtxt :

import numpy as np
data = np.genfromtxt('data.csv', delimiter=',', names=True)

这将做的是创建一个 numpy Structured Array ,它为按标题名称查询数据提供了一个很好的界面(如果您有标题行,请确保使用 names=True)。

示例,给定的 data.csv 包含:

a,b,c
1,2,3
4,5,6
7,8,9

然后您可以通过以下方式访问元素:

>>> data['a']        # Column with header 'a'
array([ 1., 4., 7.])
>>> data[0] # First row
(1.0, 2.0, 3.0)
>>> data['c'][2] # Specific element
9.0
>>> data[['a', 'c']] # Two columns
array([(1.0, 3.0), (4.0, 6.0), (7.0, 9.0)],
dtype=[('a', '<f8'), ('c', '<f8')])

genfromtext 还按照您的要求提供了一种方法来“预先格式化按列提取的数据。”

converters : variable, optional

The set of functions that convert the data of a column to a value. The converters can also be used to provide a default value for missing data: converters = {3: lambda s: float(s or 0)}.

关于python - 将 CSV 值读入列表字典的大多数 Pythonic 方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23474507/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com