为了账号安全,请及时绑定邮箱和手机立即绑定

添加到字典的条目被覆盖

添加到字典的条目被覆盖

温温酱 2022-05-24 16:08:07
有一个字典已初始化,序列化程序提供一些数据,并通过迭代项目列表添加到嵌套数组中:list = {"shopping_list": []}item = {}count = 0stuff = json.loads(serializer.data["stuff_file"])for s in stuff:  item["level"] = count  item["position"] = count * 10  item["item_name"] = s["name"]  list["shopping_list"].append(item)  count += 1但是,我没有收到唯一项目的列表(期望append这样做的方法),而是获得了具有适当项目计数的列表,但是所有以前的项目都被最新的项目覆盖,例如:{    "shopping_list": [        {            "level": 2,            "position": 20,            "item_name": "Bronze Badge"        },        {            "level": 2,            "position": 20,            "item_name": "Bronze Badge"        },        {            "level": 2,            "position": 20,            "item_name": "Bronze Badge"        }    ]}我应该如何写入列表以使所有项目都独一无二,例如:{    "shopping_list": [        {            "level": 0,            "position": 0,            "item_name": "Gold Badge"        },        {            "level": 1,            "position": 10,            "item_name": "Silver Badge"        },        {            "level": 2,            "position": 20,            "item_name": "Bronze Badge"        }    ]}?
查看完整描述

1 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

不要在循环外创建变量,而是在其中创建item:


list = {"shopping_list": []}

count = 0


stuff = [{"name": "Gold Badge"}, {"name": "Silver Badge"}, {"name": "Bronze Badge"}]


for s in stuff:

  item = {}

  item["level"] = count

  item["position"] = count * 10

  item["item_name"] = s["name"]


  list["shopping_list"].append(item)

  count += 1


print(list)

输出:


{'shopping_list': [{'level': 0, 'position': 0, 'item_name': 'Gold Badge'}, {'level': 1, 'position': 10, 'item_name': 'Silver Badge'},{'level': 2, 'position': 20, 'item_name': 'Bronze Badge'}]}

正如@DeepSpace 指出的那样,您还可以使用字典文字:


for s in stuff:

  list["shopping_list"].append({'level': count, 'position': count * 10, 'item_name': s['name']})

  count += 1

事实上,你可以去掉 count 变量,也可以这样做:


for count, s in enumerate(stuff):

  list["shopping_list"].append({'level': count, 'position': count * 10, 'item_name': s['name']})



查看完整回答
反对 回复 2022-05-24
  • 1 回答
  • 0 关注
  • 116 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号