如何将 CSV 加载到字典(哈希)中?

How to load a CSV into a dictionary (hash)?

我正在处理(未排序的)CSV 文件,其中某些列包含 key,而另一列是 value .比方说,每行的列 (1, 2, 3, 7) 包含键,第 11 列是该行的值。

我想将它们加载到散列中,以便能够快速访问键的值。我是 NumPy 的新手,对 numpy.loadtxt() 的速度和易用性印象最深——我可以准确地为它提供我感兴趣的列,并且它可以快速加载非常大的 CSV 文件。

但它将它们加载到一个平面 ndarray -- 而不是字典中。我怎样才能以与 loadtxt() 相似的速度和轻松程度获得类似哈希的东西?

在 Python 中一次 读取一行——例如使用 csv 包——很慢。将 ndarray 循环到 将数据复制 到散列中既缓慢又浪费。

也许还有其他一些快速的单行代码?或者巧妙地使用相同的 loadtxt(),这将生成具有 $O(log(n))$ 查找的散列(或类似散列)对象?

你可以试试:

d = pd.read_csv('data.txt', header=None, usecols=[1, 2, 3, 7, 11],
                index_col=[0, 1, 2, 3], sep=' ')[11].to_dict()

一些信息:

  • header=None:将第一行视为数据而不是列名
  • usecols=[1, 2, 3, 7, 11]: select 只有有用的列
  • index_col=[0, 1, 2, 3]:定义第1、2、3、7列为索引(key)
  • sep=' 'loadtxt
  • 的默认分隔符
  • [11]:提取值列
  • .to_dict():将您的 series 转换为 dict

Python有这个能力built-in:

import csv
read_data =[]
with open('data.txt', 'r') as fin:
  reader = csv.DictReader(sep=' ')
  for line in reader:
    read_data.append([line[1], line[2], line[3], line[7], line[11]])