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'}]}
代码有什么问题!!!!
答案 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'}]}