我有一个包含以下数据的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)。由于我不关心语言,我在更广泛的意义上提出这个问题。
答案 0 :(得分:1)
如果我理解你的话,这就是你要求的 - 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作为变量名的原因是我认为它们是“哈希”,这就是perl和awk中这种类型的关联数组。对不起。