我有一个 csv 结构的数据集,如下所示:
Name,code,count
Adam,01,48
Bill,01,32
Chris,01,4
Carl,01.01,5
Dave,01.01,1
David,01.01,1
Eric,01.01.01,26
Earl,01.01.01.01,2
Frank,01.01.01.01,2
Greg,01.01.01.02,2
Harold,01.01.01.03,7
Ian,01.01.01.03,3
Jack,01.01.01.03,1
John,01.01.01.04,10
Kyle,01.01.01.04,2
Larry,01.01.03.01,3
Mike,01.01.03.01.01,45
Nick,01.01.03.01.01.01,1
Oliver,01.01.03.01.01.02,16
Paul,01.01.03.01.01.03,23
我想用Python制作一个字典,其中“名称”和“计数”是键:值对(这很容易),但我想根据“代码”号组织一个层次结构。即 01.01 是 01 的子级,我不确定如何迭代数据来实现这一点。我最终想要对整个结构进行 json 转储,但如何构建层次结构让我感到沮丧。非常感谢任何帮助。
最佳答案
在Python中实现树结构的一种简单而优雅的方法是使用递归defaultdict
:
import csv, json
from collections import defaultdict
def tree():
return defaultdict(tree)
d = tree()
with open('data.txt', 'rb') as f:
reader = csv.reader(f, delimiter=',')
for name, code, count in list(reader)[1:]:
path = code.split('.')
iter_node = d
for node in path:
iter_node = iter_node[node]
iter_node['values'][name] = count
print json.dumps(d, indent=2)
{
"01": {
"values": {
"Chris": "4",
"Bill": "32",
"Adam": "48"
},
"01": {
"values": {
"Dave": "1",
"Carl": "5",
"David": "1"
},
"03": {
"01": {
"01": {
"02": {
"values": {
"Oliver": "16"
}
},
"03": {
"values": {
"Paul": "23"
}
},
"01": {
"values": {
"Nick": "1"
}
},
"values": {
"Mike": "45"
}
},
"values": {
"Larry": "3"
}
}
},
"01": {
"values": {
"Eric": "26"
},
"02": {
"values": {
"Greg": "2"
}
},
"03": {
"values": {
"Harold": "7",
"Ian": "3",
"Jack": "1"
}
},
"01": {
"values": {
"Earl": "2",
"Frank": "2"
}
},
"04": {
"values": {
"John": "10",
"Kyle": "2"
}
}
}
}
}
}
关于python - 来自 csv python 的分层 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37254046/