Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.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
将对象附加到子json键PYTHON_Python_Json_Flask Sqlalchemy - Fatal编程技术网

将对象附加到子json键PYTHON

将对象附加到子json键PYTHON,python,json,flask-sqlalchemy,Python,Json,Flask Sqlalchemy,我试图将循环中的一个对象附加到json对象中创建的两个子键之一 for agency in q: dashboard[agency.id]= [] dashboard[agency.id].append({"name": agency.agency.name}) dashboard[agency.id].append({"stats": []}) dashboard[agency.id].append({"users": []}) for row in stat

我试图将循环中的一个对象附加到json对象中创建的两个子键之一

for agency in q:
    dashboard[agency.id]= []
    dashboard[agency.id].append({"name": agency.agency.name})
    dashboard[agency.id].append({"stats": []})
    dashboard[agency.id].append({"users": []})

for row in stats:
    if row['is_agency']:
        dashboard[row['agency_id']['stats']].append(dict(row))
    else:
        dashboard[row['agency_id']['users']].append(dict(row))
但它抛出了一个错误:

dashboard[row['agency_id']]['users'].append(dict(row))
TypeError: list indices must be integers, not str
如果我删除['users']或['stats']键,它会附加到agency.id键上。但是,当我尝试将其添加为第二级密钥时,它会抛出上述错误

由于json对象将始终具有3个子键(名称[0]、统计[1]、用户[2]),因此我也尝试使用:

for row in stats:
    if row['is_agency']:
        dashboard[row['agency_id']][1].append(dict(row))
    else:
        dashboard[row['agency_id']][2].append(dict(row))
这将导致以下错误:

dashboard[row['agency_id']][2].append(dict(row))
AttributeError: 'dict' object has no attribute 'append'

如user@Moses Koledoye所示,如果您执行以下操作,则会混淆对象的类型和方法:

dashboard[row['agency_id']][1]['stats'].append(row)
逐步:

行['agency\u id']
是一个
Int
,所以

dashboard[row['agency_id']] #has type list
将为您提供列表类型的键
行['agency\u id']

dashboard[row['agency_id']][1] 
为您提供列表位置1中的值

`dashboard[row['agency_id']][1]['stats']` #is a List also
最后给出了统计信息列表(以它为例),这就是为什么可以使用
append
方法:

dashboard[row['agency_id']][1]['stats'].append(row)

row
是一个字典吗?否,它是一个python对象,来自:stats=db.engine.execute(文本(“调用仪表板”(“+str(cu.id)+”,“+cu.user_type+”,“+str(cu.id)+”,“2017-05-01”,“2017-05-30”);))。fetchall()。调用任何行['column']都可以正常工作,正如在if语句中使用行['agency_id']所显示的那样。当我将它附加到json中的适当位置时,我还使用dict()将其转换为字典。(如果我通过代理_id将其附加到json对象的主节点,也可以使用它)。我唯一的问题是语法试图找到“stats”或“user”的子键:您已经粘贴回了我键入的相同内容。我还尝试将第二个节点移动到括号中,例如:dashboard[row['agency\u id']['stats']].append()没有成功。
dashboard[row['agency\u id']][1]['stats'].append(row)
dashboard[row['agency\u id']][2]['users'].append(row)
Moses:虽然这似乎有效(需要做更多研究)我不确定我是否理解这个解决方案。为什么需要对象索引和键名?看起来你总是用其中一个。至少只有关键索引。不管怎样,谢谢你的帮助!非常感谢你的解释。很有道理!还有摩西的解决方案!