python - 来自 csv python 的分层 JSON

标签 python json csv hierarchy

我有一个 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/

相关文章:

python - 对象类型和访问嵌套值

python - 从 csv 文件中切片行

python - 如何在Elasticsearch中批量插入而忽略过程中可能出现的所有错误?

python - 没有名为 'numpy' : Visual Studio Code 的模块

python - 获取节点位置和边长

python - 错误: "unsupported operand type(s) for *: ' Equality' and 'float' "

android - 为什么使用 JSON(对象)而不是标准的 ArrayLists?

python - 从分组数据框中获取选定的行

c# - 通过转换器转换Json字符串与反序列化

php - 不带引号的 CSV 不适用于 fgetcsv