猿问

添加到字典的条目被覆盖

有一个字典已初始化,序列化程序提供一些数据,并通过迭代项目列表添加到嵌套数组中:


list = {"shopping_list": []}

item = {}

count = 0


stuff = 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"


        }

    ]

}

?


温温酱
浏览 117回答 1
1回答

慕村225694

不要在循环外创建变量,而是在其中创建item:list = {"shopping_list": []}count = 0stuff = [{"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 += 1print(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']})
随时随地看视频慕课网APP

相关分类

Python
我要回答