私は以下のコードを持っています。 出力は非常に奇妙です。私はそれが間違って起こっている辞書がPythonで更新されないのはなぜですか?
{'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'}]]}
を探していた通りであり
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'}]]}
として来ていますか?
コードの「修正」は 'k =" "= copy.deepcopy(w)'を 'w = copy.deepcopy(w);に置き換えています。 k ["a"] = w'ですが、より良い解決策は、viraptorのようにリストの理解に再構成することです – zehnpaard