繁体   English   中英

为什么我的字典没有在 Python 中更新?

[英]Why my dictionary is not updating in Python?

我有以下代码,输出非常奇怪。

wsman_invoke_attr = {}
l = [u'BIOS.Setup.1-1:Slot3', u'BIOS.Setup.1-1:Slot2', u'BIOS.Setup.1-1:Slot1', u'BIOS.Setup.1-1:Slot5', u'BIOS.Setup.1-1:Slot4']
w = []
k = {"a":w}
for i in l:
    wsman_invoke_attr["InstanceID"] = i
    w.append([wsman_invoke_attr])
    k["a"] = copy.deepcopy(w)

    wsman_invoke_attr.clear()
print k

输出为{'a': [[{'InstanceID': u'BIOS.Setup.1-1:Slot4'}], [{'InstanceID': u'BIOS.Setup.1-1:Slot4'}], [{'InstanceID': u'BIOS.Setup.1-1:Slot4'}], [{'InstanceID': u'BIOS.Setup.1-1:Slot4'}], [{'InstanceID': u'BIOS.Setup.1-1:Slot4'}]]}我正在寻找的地方

{'a': [[{'InstanceID': u'BIOS.Setup.1-1:Slot3'}], [{'InstanceID': u'BIOS.Setup.1-1:Slot4'}], [{'InstanceID': u'BIOS.Setup.1-1:Slot2'}], [{'InstanceID': u'BIOS.Setup.1-1:Slot5'}], [{'InstanceID': u'BIOS.Setup.1-1:Slot1'}]]}

哪里出错了?

你似乎做了很多不必要的事情。 这里不需要清除临时字典和深拷贝。 这是一个更简单的解决方案:

instances = [[{'InstanceID': iid}] for iid in l]
k = {'a': instances}

至于您的代码中的问题 - 当您执行wsman_invoke_attr.clear()您仍然持有对您之前使用的字典的引用,因此您同时清除了所有字典。 然后,您再次为所有这些名称添加一个新名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM