将对象追加到子json键PYTHON

时间:2017-05-28 18:01:55

标签: 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 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

如果我删除['用户']或['统计数据']键,则会将其附加到agency.id键。但是当我尝试将其添加为二级密钥时,它会抛出上述错误。

由于json对象将始终具有3个子键(name [0],stats [1],users [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'

1 个答案:

答案 0 :(得分:1)

您正在混淆对象的类型和方法,正如用户@Moses Koledoye所示,如果您这样做:

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

一步一步:

row['agency_id']Int,所以

dashboard[row['agency_id']] #has type list

将为您提供类型为List

的键row['agency_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)