我试图将一个循环中的对象追加到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'
答案 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)