如何在 Python 中将列表中的项目添加到字典中,

时间:2021-06-27 11:00:03

标签: python dictionary

itmeslist = {}
Itmesdict = {"data":[]}
fruits = ['Mango.ok', 'Grapes.ok', 'Bananna', 'Kiwi.ok', 'Oranges']
for x in fruits:
    if x.endswith(".ok"):
        itmeslist["Name"] = x
        itmeslist["Status"] = "OK"
        Itmesdict["data"].append(itmeslist)
print(Itmesdict)

我正在尝试将项目(键、值对)添加到字典中,但它只添加了相同的项目(最后一个项目)。 代码在上面:

这是输出:

{'data': [{'Name': 'Kiwi.ok', 'Status': 'OK'}, {'Name': 'Kiwi.ok', 'Status': 'OK'}, {'Name': 'Kiwi.ok', 'Status': 'OK'}]}

我想要的是:

{'data': [{'Name': 'Mango.ok', 'Status': 'OK'}, {'Name': 'Grapes.ok', 'Status': 'OK'}, {'Name': 'Kiwi.ok', 'Status': 'OK'}]}

代码有什么问题!!!!

5 个答案:

答案 0 :(得分:1)

你应该这样做:

Itmesdict = {"data":[]}
fruits = ['Mango.ok', 'Grapes.ok', 'Bananna', 'Kiwi.ok', 'Oranges']
for x in fruits:
    if x.endswith(".ok"):
        Itmesdict["data"].append({"name": x, "status": "OK"})
print(Itmesdict)

答案 1 :(得分:0)

您必须稍微更改代码以将名称和状态保留在单独的 dict 中,然后将其添加为 main dict 的列表项。

itmeslist = {}
Itmesdict = {"data":[]}
fruits = ['Mango.ok', 'Grapes.ok', 'Bananna', 'Kiwi.ok', 'Oranges']

for x in fruits:
    if x.endswith(".ok"):
        item = dict()
        item["Name"] = x
        item["Status"] = "OK"
        Itmesdict["data"].append(item)
print(Itmesdict)

{'data': [{'Name': 'Mango.ok', 'Status': 'OK'}, {'Name': 'Grapes.ok', 'Status': 'OK'}, {'Name': 'Kiwi.ok', 'Status': 'OK'}]}

你也可以使用这样的单线,

Itmesdict = {"data": list(
    {"Name": fruit, "Status": "OK"} for fruit in fruits if fruit.endswith(".ok")
)}

print(Itmesdict)

{'data': [{'Name': 'Mango.ok', 'Status': 'OK'}, {'Name': 'Grapes.ok', 'Status': 'OK'}, {'Name': 'Kiwi.ok', 'Status': 'OK'}]}

答案 2 :(得分:0)

基本上,list 保持对对象的引用,而不是对象本身,因此您每次都更新相同的 dict。这就是为什么它在您的输出中全部为 Kiwi.ok。相反,附加一个副本:

itmeslist = {}
Itmesdict = {"data":[]}
fruits = ['Mango.ok', 'Grapes.ok', 'Bananna', 'Kiwi.ok', 'Oranges']
for x in fruits:
    if x.endswith(".ok"):
        itmeslist["Name"] = x
        itmeslist["Status"] = "OK"
        Itmesdict["data"].append(itmeslist.copy())

print(Itmesdict)
{'data': [{'Name': 'Mango.ok', 'Status': 'OK'}, {'Name': 'Grapes.ok', 'Status': 'OK'}, {'Name': 'Kiwi.ok', 'Status': 'OK'}]}

答案 3 :(得分:0)

@sam-sam 干得好,实际上一切正常,继续努力! :)

首先 - 为什么将“ok”状态存储在字符串中?

也许使用字典? :)

some_dict = {"item_name": {"parameter": "value", ...}, ...}

那么 some_dict["item_name"]["ok"] = True 会更容易,你不觉得吗?

您是否使用过 ipdb/任何其他调试器(即来自 GUI IDE)来处理您的代码?是时候学习了。

另一件事是先将数据准备为列表,然后再添加:)

itmeslist = {} 是 itemsdict 不是列表。

尝试在您的方式上进一步征服,然后在评论中返回此答案的更多问题。谢谢:))

编辑: 你不应该复制 itemslist dict EACH FOR-LOOP 因为它是强反模式,这是在其他答案中建议的:

for x in fruits:
    if x.endswith(".ok"):
        itmeslist["Name"] = x
        itmeslist["Status"] = "OK"
        Itmesdict["data"].append(itmeslist.copy())

最好的答案是来自@román-cárdenas ;) 但这并没有教你:)

答案 4 :(得分:0)

Itmesdict = {"data":[]}
fruits = ['Mango.ok', 'Grapes.ok', 'Bananna', 'Kiwi.ok', 'Oranges']
for x in fruits:
    if x.endswith(".ok"):
        fruit = {
            'Name': x,
            'Status': 'OK'
        }

        Itmesdict["data"].append(fruit)
print(Itmesdict)

这将导致:

{'data': [{'Name': 'Mango.ok', 'Status': 'OK'}, {'Name': 'Grapes.ok', 'Status': 'OK'}, {'Name': 'Kiwi.ok', 'Status': 'OK'}]}
相关问题