基本上,我有一个看起来像这样的文件:
year gender marst age people
A 'abc' x 12 1000
B 'tex' y 34 120
B 'tex' x 78 1300
E 'yet' x 88 1400
A 'abc' y 22 150
A 'abc' x 22 1600
我需要创建一个如下所示的复杂字典:
complete_dict = {A:{'abc':{x:2600,y:150}},
B:{'tex':{x:1300,y:120}},
E:{'yet':{x:1400}}}
我尝试过的是
import csv
import numpy as np
d={}
for row in reader:
c=row['year']
values = [row['age'], row['people']]
s = row['gender']
t = row['marst']
if c not in d:
d[c]={}
if s not in d[c]:
d[c][s] = {}
if t not in d[c][s]:
d[c][s][t]= []
d[c][s][t].append(values)
print d
所以我可以得到结果
complete_dict = {A:{'abc':{x:[[12,1000],[22,1600]] ,y:[22,150]}},
B:{'tex':{x:[78,1300],y:[34,120]}},
E:{'yet':{x:[88,1400]}}}
我尝试使用append(sum(values))
代替append(values)
,但收到了错误。
答案 0 :(得分:1)
from collections import defaultdict
def factory():
return defaultdict(lambda:defaultdict(int))
d = defaultdict(factory)
txt = """A 'abc' x 12 0.001
B 'tex' y 34 0.002
B 'tex' x 78 0.005
E 'yet' x 88 0.090
A 'abc' y 22 0.120
A 'abc' x 22 0.120"""
for line in txt.splitlines():
words = line.split()
d[words[0]][words[1]][words[2]] += 1
答案 1 :(得分:0)
根据要求的外观,您不需要在最嵌套的字典中使用列表。您似乎想要计算不同“主要”条目的出现次数。这意味着您需要替换上一个if:
if t not in d[c][s]:
d[c][s][t] = 1
else:
d[c][s][t] += 1