2016-04-07 17 views
-1

Kodun altındayım, Çıktı çok garip geliyor. Yanlış gidiyorSözlüküm neden Python'da güncellenmiyor?

{'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'}]]} 

arıyorum olarak nerede

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 

çı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'}]]} olarak geliyor?

+1

Kodun "düzeltmesi", "k [" a "] = copy.deepcopy (w)' yi 'w = copy.deepcopy (w) ile değiştirmektir; k ["a"] = w' ama daha iyi bir çözüm, bir yazıcının başına bir liste kavrayışına yeniden yapılanmaktır. – zehnpaard

cevap

1

Gerekli olmayan pek çok şey yapıyor gibi görünüyorsunuz. Geçici sözlüğü ve derin yazıyı temizlemek burada gerekli değildir. İşte basit bir çözüm: Kodunuzdaki meselesine gelince

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

- Eğer hala sözlüğe bir başvuru tutuyorlar wsman_invoke_attr.clear() yaptığınızda aynı anda hepsini temizliyoruz nedenle, daha önce kullanılan . Sonra tekrar hepsine yeni bir ad eklersiniz.

İlgili konular