最合适的数据结构(Python)

Jam*_*esS 9 python arrays dictionary data-structures

我是Python新手,对于在我的代码中存储数据的"最佳"方式可能是一个非常基本的问题.任何建议非常感谢!

我有一个很长的.csv文件,格式如下:

Scenario,Year,Month,Value
1,1961,1,0.5
1,1961,2,0.7
1,1961,3,0.2
etc.
Run Code Online (Sandbox Code Playgroud)

我的场景值从1到100,年份从1961年到1990年,月份从1到12.因此,我的文件有100*29*12 = 34800行,每行都有一个关联值.

我想把这个文件读成某种Python数据结构,这样我就可以通过指定'Scenario','Year'和'Month'来访问'Value'.请问最好的方法是什么(或者有哪些选择)?

在我的脑海中,我认为这些数据是一种带有轴,用于场景,年和月的"数字长方体",因此每个值都位于坐标(场景,年,月).出于这个原因,我很想尝试将这些值读入3D numpy数组,并使用Scenario,Year和Month作为索引.这是明智的做法吗?

我想我也可以创建一个字典,其中键是类似的

str(Scenario)+str(Year)+str(Month)
Run Code Online (Sandbox Code Playgroud)

这会更好吗?还有其他选择吗?

(通过'更好',我想我的意思是'访问速度更快',尽管如果一种方法比另一种方法的内存密集程度要低得多,那么也很了解它.

非常感谢!

fma*_*ark 7

我会使用元组词典.简单,快速,并且哈希表查找以检索单个值:

import csv

reader = csv.reader(open('data.csv', 'rb'))
header = reader.next()
data = {}

for row in reader:
    key = tuple([int(v) for v in row[:-1]])
    val = row[-1]
    data[key] = float(val)

# Retrieve a value
print data[1, 1961, 3]
Run Code Online (Sandbox Code Playgroud)

  • 在python中编写一个简单的解决方案总是很高兴:) (2认同)