Python:循环遍历列表时嵌套 For 循环覆盖整个字典

羊羔

目标:

我正在尝试迭代嵌套字典的副本(基于简单的 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)

您不需要将类型设置为“users”,因为它已经在架构中设置了,但是如果您愿意,您可以将其设置为不同的值。

希望这可以帮助!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

循环遍历 2 个字典列表

来自分类Dev

如何使用for循环遍历Python中的嵌套列表

来自分类Dev

循环遍历字典列表

来自分类Dev

不遍历整个字典

来自分类Dev

不遍历整个字典

来自分类Dev

循环遍历嵌套列表字典以计算关键出现次数

来自分类Dev

循环遍历嵌套列表的功能方法

来自分类Dev

循环遍历字典python

来自分类Dev

在Python中循环遍历列表

来自分类Dev

循环遍历 Python 中的整数列表与字典列表

来自分类Dev

遍历/循环遍历列表

来自分类Dev

循环遍历元组列表时的迭代问题

来自分类Dev

Python列表理解嵌套循环

来自分类Dev

如何防止for循环覆盖字典?

来自分类Dev

python3:在遍历整个文件时再次执行 for 循环

来自分类Dev

代码不是遍历整个字典吗?

来自分类Dev

代码不是遍历整个字典吗?

来自分类Dev

Ansible:循环遍历嵌套的字典变量

来自分类Dev

多个字典的单个 for 循环

来自分类Dev

循环字典的 Python 列表

来自分类Dev

循环遍历嵌套哈希

来自分类Dev

循环字典以制作多个字典

来自分类Dev

遍历两个字典列表并创建无循环的元组列表

来自分类Dev

遍历嵌套字典列表

来自分类Dev

python for循环不返回多个字典

来自分类Dev

循环浏览从yaml加载的嵌套python字典/列表

来自分类Dev

为每个循环遍历列表时删除列表中的项目

来自分类Dev

遍历链表 Python 3 时的无限循环

来自分类Dev

For循环未遍历整个循环