【发布时间】:2019-07-28 01:29:53
【问题描述】:
目标:
我正在尝试迭代嵌套字典的副本(基于简单的 JSON 模式),以便为代表团队及其成员的 Web 服务器请求构建单独的 JSON 有效负载。
每个有效负载都来自循环外部的字典,其中包含团队作为键,其用户的 ID 作为值。
问题:
我能够成功复制源字典并创建包含其第一个成员的团队字典,但在列表的第二次迭代以添加其他成员时,第一个成员被覆盖,而不是第二个成员被添加到字典有效负载中
这是我第一次使用嵌套字典,因此非常感谢任何提示。
# source dictionary
teams_dict = {'Boston':['1234','5678'],
'Atlanta':['9876','4321']}
# schema to be modified
payload_schema = {"data":
{"id":None,"type":"teams","attributes":
{"name":None},"relationships":
{"members":{"data":[{"id":None,"type":"users"}]}}}}
# loop
for team, members in teams_dict.items():
team_load = deepcopy(payload_schema)
team_load['data']['attributes']['name']=team
#print(f"Now creating team {team}")
for member in members:
team_load['data']['relationships']['members']['data'][0]['id']=member
team_load['data']['relationships']['members']['data'][0]['type']='users'
print(team_load)
#print(f"Added user id {member} to payload")
我最终得到一个仅包含第二个成员的有效负载,因为第一个成员被覆盖:
print(team_load)
{'data': {'id': None, 'type': 'teams', 'attributes': {'name': 'Atlanta'}, 'relationships': {'members': {'data': [{'id': '4321', 'type': 'users'}]}}}}
理想情况下应该是这样的:
print(team_load)
{'data': {'id': None, 'type': 'teams', 'attributes': {'name':'Atlanta'}, 'relationships': {'members': {'data': [{'id': '9876','type': 'users'},{'id': '4321','type': 'users'}]}}}}
【问题讨论】:
-
看起来你总是覆盖到数据的索引 0
-
谢谢!那讲得通。这和其他回复一样有用。
标签: python dictionary