在Python中操作数据结构

2024-10-01 02:21:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有JSON格式的数据:

data = {"outfit":{"shirt":"red,"pants":{"jeans":"blue","trousers":"khaki"}}}

我正试图使用InfoVis将这些数据绘制到一个决策树中,因为它看起来很漂亮,而且是交互式的。问题是它们的图形采用以下格式的JSON数据:

^{pr2}$

请注意,在每个键和值中都添加了“id”、“data”和“children”,并调用每个键和值“name”。我觉得我必须编写一个递归函数来添加这些额外的值。有没有一个简单的方法可以做到这一点?在

这是我想做的,但我不确定是否正确。循环遍历所有键和值,并将其替换为适当的:

^{3}$

如果我走远了就告诉我。在

这是他们的例子http://philogb.github.com/jit/static/v20/Jit/Examples/Spacetree/example1.html

这是数据http://philogb.github.com/jit/static/v20/Jit/Examples/Spacetree/example1.code.html


Tags: 数据githubcomjsonhttpdata格式static
1条回答
网友
1楼 · 发布于 2024-10-01 02:21:47

一个简单的递归解决方案:

data = {"outfit":{"shirt":"red","pants":{"jeans":"blue","trousers":"khaki"}}}
import json
from collections import OrderedDict

def node(name, children):
    n = OrderedDict()
    n['id'] = 'node' + name.capitalize()
    n['name'] = name
    n['data'] = {}
    n['children'] = children
    return n

def convert(d):
    if type(d) == dict:
        return [node(k, convert(v)) for k, v in d.items()]
    else:
        return [node(d, [])]

print(json.dumps(convert(data), indent=True))

注意,convert返回一个list,而不是dict,因为data也可以有多个键,而不是'outfit'。在

输出:

^{pr2}$

相关问题 更多 >