将现有的 defaultdict 输出为耀斑树状图的适当 JSON 格式?

HR1*_*23r 4 html python json

我有一个defaultdict(list),我用来simplejson.dumps(my_defaultdict)将其输出defaultdict为 JSON 格式。我正在使用来自http://bl.ocks.org/mbostock/4063570 的树状图的 HTML 代码,但我试图将我的defaultdict信息转换为作者正在使用的 JSON 文件的格式。此 JSON 文件名为:/mbostock/raw/4063550/flare.JSON并且可以在此链接中找到:http://bl.ocks.org/mbostock/raw/4063550/flare.json

所以这是我的 defaultdict 数据:

my_defaultdict = {5: ['child10'], 45: ['child92', 'child45'], 33:['child38']}

json_data = simplejson.dumps(my_defaultdict)
Run Code Online (Sandbox Code Playgroud)

所以我当前的 json_data 看起来像这样:

{
"5": [
        "child10"
], 
"45": [
    "child92", 
    "child45"
], 
"33": [
    "child38"
]
}
Run Code Online (Sandbox Code Playgroud)

因此,在我的理解中,数字将是相应的“名称”:“5”,然后我的 JSON 格式文件也会将孩子作为“孩子”。就像现在一样,我的 JSON 格式输出不在树状图的 HTML 代码中运行。

预期的结果是这样的:

{
 "name": "flare",
     "children": [
  {
   "name": "5",
   "children": [
    {
     "name": "child10", "size": 5000},
     ]
    {
     "name": "45",
     "children": [
      {"name": "child92", "size": 3501},
      {"name": "child45", "size": 3567},
    ]
    },
     {
 "name": "33",
 "children": [
  {"name": "child38", "size": 8044}
 ]
}
}
Run Code Online (Sandbox Code Playgroud)

编辑:

@martineau 的答案有效,但这不是我想要的。我从 adefaultdict(list)和所需的输出开始,如上所述,应该将“孩子”作为dicts的列表,而对于 martineau 类型的回答,“孩子”只是一个列表。如果有人可以添加一些东西以使其工作,那就太好了。不要担心“大小”变量,现在可以忽略它。

mar*_*eau 6

您需要根据您的 defaultdict 制作一个新字典。您的示例代码中的孩子只是一个字符串列表,所以我不知道每个字符串的“大小”来自哪里,所以只需将其更改为一个列表dicts(其中没有“大小”的条目“ 钥匙)。

from collections import defaultdict
#import simplejson as json
import json  # using stdlib module instead

my_defaultdict = defaultdict(list, { 5: ['child10'],
                                    45: ['child92', 'child45'],
                                    33: ['child38']})

my_dict = {'name': 'flare',
           'children': [{'name': k,
                         'children': [{'name': child} for child in v]}
                            for k, v in my_defaultdict.items()]}

json_data = json.dumps(my_dict, indent=2)

print(json_data)
Run Code Online (Sandbox Code Playgroud)

输出:

from collections import defaultdict
#import simplejson as json
import json  # using stdlib module instead

my_defaultdict = defaultdict(list, { 5: ['child10'],
                                    45: ['child92', 'child45'],
                                    33: ['child38']})

my_dict = {'name': 'flare',
           'children': [{'name': k,
                         'children': [{'name': child} for child in v]}
                            for k, v in my_defaultdict.items()]}

json_data = json.dumps(my_dict, indent=2)

print(json_data)
Run Code Online (Sandbox Code Playgroud)