Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python将元组转换为JSON_Python_Json_Pandas_D3.js_Data Science - Fatal编程技术网

使用python将元组转换为JSON

使用python将元组转换为JSON,python,json,pandas,d3.js,data-science,Python,Json,Pandas,D3.js,Data Science,我想要一些帮助,将[(X,Y,Z),(…)类型的(string,string,int)]格式的元组转换为JSON文件,格式如下: { "name": "X", "children": [{ "name": "Y", "value": Z }] } 我至少有1M个值要转换,目前我已尝试使用字典键: b = (dict(zip(keys,row)) for row in tuples) 使用JSON库 print (json.dumps

我想要一些帮助,将
[(X,Y,Z),(…)
类型的
(string,string,int)]
格式的元组转换为JSON文件,格式如下:

{
    "name": "X",
    "children": [{
        "name": "Y",
        "value": Z
    }]
}
我至少有1M个值要转换,目前我已尝试使用字典键:

b = (dict(zip(keys,row)) for row in tuples)  
使用JSON库

print (json.dumps(list(b)))  
但是,这将生成格式为的JSON

[{"type": "y", "name": "z", "count": z},...  
我希望Y和Z值最好嵌套在子项下,X值在每个唯一字符串中使用一次

   {
    "name": "X",
    "children": [{
        "name": "Y",
        "value": Z
    },
                {
        "name": "Y2",
        "value": Z2
    }]
   }
已更新。

请尝试以下操作:

import json

ts = [("egg", "bacon", 1), ("egg", "sausage", 2), ("spam", "baked beans", 3)]
for t in ts:
    o = {"name": t[0], "children": [{"name": t[1], "value": t[2]}]}
    j = json.dumps(o)
    print(j)
输出:

{"children": [{"name": "bacon", "value": 1}], "name": "egg"}
{"children": [{"name": "sausage", "value": 2}], "name": "egg"}
{"children": [{"name": "baked beans", "value": 3}], "name": "spam"}

假设您想要一个dict列表作为json的输出,每个dict都是您问题中的格式:

以下一行代码将把它放入您要查找的数据结构中,每个元组生成自己的完整结构:

[{'name':i[0], 'children': [{'name': i[1], 'value': i[2]}]}  for i in tuples]
但我怀疑您希望外部名称是唯一的,内部子级是从多个元组构建的,因此只有一个这样的结构是使用
'name'==X
生成的

要以节省内存的方式执行此操作,请从按X对元组排序开始:

# should work as long as you aren't doing any fancy sorting
stuples = sorted(tuples) 

name = None
dat = None
for t in stuples:
    if name != t[0]:
        if dat is not None:
            writeDat(json.dumps(dat))
        name = t[0]
        dat = {'name': t[0], 'children': [{'name': t[1], 'value': t[2]}]}
    else:
        dat['children'].append({'name': t1, 'value': t[2]})

我假设您有一个函数可以写出其中的一个,例如
writeDat()
,它获取json,这样您就不会将它们全部存储在ram中。

您的预期输出不是有效的json。为什么要复制对象
{“name”:“Y”,“value”:Z}
?请解释如何从输入数据获取预期输出!我已经修复了您的JSON。
NameError:name'v'未定义
AttributeError:'list'对象没有属性'update'
此对象为我提供了所需的输出,但我有一个后续问题。如果我希望JSON输出在子树中有(“鸡蛋”、“香肠”2)、(“垃圾邮件”、“烘焙豆”3)作为元组。只列出一次名字和孩子。你建议我如何处理请编辑你的问题或创建一个新的问题。根据要求编辑问题。使用已经给出的答案,你应该能够自己解决其余问题。这非常有效。感谢它回答你的问题,考虑接受答案。
# should work as long as you aren't doing any fancy sorting
stuples = sorted(tuples) 

name = None
dat = None
for t in stuples:
    if name != t[0]:
        if dat is not None:
            writeDat(json.dumps(dat))
        name = t[0]
        dat = {'name': t[0], 'children': [{'name': t[1], 'value': t[2]}]}
    else:
        dat['children'].append({'name': t1, 'value': t[2]})