我有一个defaultdict(list),我使用simplejson.dums(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)
所以我现在的json_data看起来像这样:
{
"5": [
"child10"
],
"45": [
"child92",
"child45"
],
"33": [
"child38"
]
}
所以在我的理解中,数字将是相应的“名称”:“5”然后我的JSON格式文件也将子项作为“子”。就像现在一样,我的JSON格式输出不会在树形图的HTML代码中运行。
有关如何将我的defaultdict输出到适当的JSON格式的任何帮助都可以使用HTML代码来生成该树形图。代码必须是Python。
预期结果如下:
{
"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}
]
}
}
编辑: 马蒂诺的答案有效,但这并不是我想要的。我从一个defaultdict(列表)和所需的输出开始,如上所述应该将“children”作为dicts列表,而对于martineau类型的答案,“children”它只是一个列表。如果任何人可以添加一些东西来使它工作,那将是伟大的。不要担心“大小”变量,现在可以忽略它。谢谢。
答案 0 :(得分:3)
您需要从defaultdict创建一个新字典。示例代码中的子项只是一个字符串列表,所以我不知道" size"每一个都来自于,所以只需将其更改为dicts
列表(其中没有#34;大小"键的条目)。
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)
输出:
{
"name": "flare",
"children": [
{
"name": 33,
"children": [
{
"name": "child38"
}
]
},
{
"name": 5,
"children": [
{
"name": "child10"
}
]
},
{
"name": 45,
"children": [
{
"name": "child92"
},
{
"name": "child45"
}
]
}
]
}
答案 1 :(得分:1)
您需要构建字典,以便它包含所需的孩子'领域。 json.dumps
不会在任何预定义架构中输出数据。相反,传递给json.dumps
的对象必须已经遵循任何所需的结构。
尝试这样的事情:
my_defaultdict = {"name": "5",
"children":[ {"name": "child10", "children":[]}]}
print json.dumps(my_defaultdict)
答案 2 :(得分:0)
我用这个解决了:How to convert defaultdict to dict?
对于未来可能搜索它的人。我通过将 defaultdict
转换为普通字典来实现,只需调用:
b = defaultdict(dict)
a = dict(b)
然后 JSON 可以识别这种结构。