我有一个包含如下数据的csv:
"Store","Dept","Year","Week","Sales"
10,21,2,11,10908
11,30,2,12,12279
11,33,2,13,11061
12,81,2,14,12288
32,70,2,15,9950并希望获得一个多维数组,这样我就可以轻松地调用:
Sales[store, dept, year, week]例如,Sales[10,21,2,11] = 10908
任何语言都可以。最好是Python、Matlab或R。
不知何故,我找不到解决办法。我一直在努力让它在R中工作,到目前为止还没有成功(refer)。因为我不关心语言,所以我在更广泛的意义上开始这个问题。
发布于 2014-03-28 00:39:42
如果我没理解错的话,这就是你想要的-- python版本。这不是最好的编码,但基本思想是add函数递归地填充字典
import csv
def add(h, *args):
"""
>>> add({},1,2,4,8)
{1: {2: {4: 8}}}
"""
if len(args) == 2:
h[args[0]] = args[1]
return h
if not(args[0] in h.keys()):
h[args[0]] = {}
add(h[args[0]], *args[1:])
return h
if __name__ == "__main__":
hoh = {}
with open('data.csv', 'rb') as csvfile:
spamreader = csv.reader(csvfile, delimiter=',', quotechar='|')
headers = spamreader.next()
for row in spamreader:
print ', '.join(row)
add(hoh, *row)
import pprint
pprint.pprint(hoh)ps。我之所以使用h和hoh作为变量名,是因为我认为它们是“hoh”,这就是这种类型的关联数组在perl和awk中的名称。真对不起。
https://stackoverflow.com/questions/22683393
复制相似问题