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

2024-09-24 22:32:23 发布

您现在位置: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'}]]}

哪里出了问题


Tags: 代码inforattrcopyinvokebiosappend
1条回答
网友
1楼 · 发布于 2024-09-24 22:32:23

你好像在做很多不必要的事。在这里不需要清除临时字典和deepcopy。这里有一个更简单的解决方案:

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

至于代码中的问题—当您执行wsman_invoke_attr.clear()操作时,您仍然持有对以前使用的词典的引用,因此您同时清除了所有这些引用。然后你再给它们加一个新名字

相关问题 更多 >