[英]Python: Nested For Loop Overwriting Entire Dictionary When Looping Through List
目標:
我正在嘗試對嵌套字典的副本(基於簡單的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:
team_load['data']['relationships']['members']['data'][0]['id']=member
team_load['data']['relationships']['members']['data'][0]['type']='users'
這是一個列表:
team_load['data']['relationships']['members']['data']
因此您需要每次都附加到它。
由於您正在處理嵌套對象,因此我將使成員信息成為另一個對象,並將其從有效載荷架構中刪除:
payload_schema = {"data":
{"id":None,"type":"teams","attributes":
{"name":None},"relationships":
{"members":{"data":[]}}}}
member_schema = {"id":None,"type":"users"}
然后在內部循環中:
for member in members:
member_load = deepcopy(member_schema)
member_load['id']=member
team_load['data']['relationships']['members']['data'].append(member_load)
print(team_load)
您無需將類型設置為“用戶”,因為已經在模式中進行了設置,但是您可以根據需要將其設置為其他值。
希望這可以幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.