这是一个示例csv文件;
out_gate,in_gate,n_con
/a_a,b,1
/a_a,b,3
/a_b,a,2
/a_b,c,4
/a_c,a,5
/a_c,b,5
/a_c,b,3
/a_c,a,4
/a_d,c,2
/a_d,c,3
/a_d,b,2
我试图逐个匹配每个数据并累积它,例如, / a_a-> b:4,/ a_b-> a:2,/ a_c-> d:0,/ a_d-> c:5这里是我的代码
import csv
from collections import defaultdict
d = defaultdict(lambda : defaultdict(int))
with open("C:/Users/user/test1.txt") as in_file:
csv_reader = csv.reader(in_file)
next(csv_reader)
for row in csv_reader:
if len(row) >= 3:
x,y,count = row
d[x][y] += int(count)
keys = sorted(d)
for x in keys:
print(x, [d[x][y] for y in keys])
然后出现错误,说' x'没有定义。 (NameError:name' x'未定义,第12行)
我的最终目标是让它像这种形式(价值观不正确); 这样我就可以直接使用csv writer将它转换为excel文件。 如何更正我当前的代码?
,a,b,c,d
/a_a,0,1,1,1
/a_b,1,0,7,2
/a_c,1,6,0,3
/a_d,1,5,4,0
答案 0 :(得分:2)
虽然您的代码可能存在一些风格问题,但当我粘贴您当前列出的版本时,字典构建部分对我来说很好。
打印部分不起作用。您正在尝试使用顶级字典的键访问嵌套字典。当我将print语句更改为:
时keys = sorted(d)
for x in keys:
child_keys = sorted(d[x])
for y in child_keys:
print(x, y, d[x][y])
剩下剩下的代码,我看到了预期的输出:
('/a_a', 'b', 4)
('/a_b', 'a', 2)
('/a_b', 'c', 4)
('/a_c', 'a', 9)
('/a_c', 'b', 8)
('/a_d', 'b', 2)
('/a_d', 'c', 5)