我有以下数据:
foo red test
foo red test
foo red test2
foo blue test
bar red test
bar blue test
bar red test2
bar red test2
我想要做的是计算上面的值,从而得到这本字典词典词典:
{
'bar' : {
'blue' : {
'test': 1
},
'red' : {
'test' : 1,
'test2': 2
}
},
'foo' : {
'blue' : {
'test' : 1
},
'red' => {
'test' : 2,
'test2' : 1
}
}
}
为什么以下代码失败(我正在使用Python 2.6.2)
from collections import defaultdict
dictfinal = defaultdict(lambda: defaultdict(dict))
with open('myfileabove.txt','r') as tsvfile:
csvreader = csv.reader(tsvfile,delimiter=' ')
for rw in csvreader:
val1 = rw[0]
val2 = rw[1]
val3 = rw[2]
dictfinal[val1][val2][val3] +=1
在Perl中可以这样做: https://eval.in/121318
答案 0 :(得分:3)
将dict定义更改为:
dictfinal = defaultdict(lambda: defaultdict(lambda: defaultdict(int)))
答案 1 :(得分:0)
作为补充,我建议使用单个字典而不是嵌套字典。如果向csv添加列,它会更好地扩展。
from collections import Counter
a = """foo red test
foo red test
foo red test2
foo blue test
bar red test
bar blue test
bar red test2
bar red test2"""
b = Counter(tuple(s.split()) for s in a.splitlines())
# Counter({('foo', 'red', 'test'): 2, ('bar', 'red', 'test2'): 2, ('bar', 'blue', 'test'): 1, ('foo', 'blue', 'test'): 1, ('foo', 'red', 'test2'): 1, ('bar', 'red', 'test'): 1})