假設你有字典的字典,但你想複製幾乎整個結構(除了最內層的字典的值)。下面的代碼可以做我想做的,但我肯定有一個更聰明的方式來做到這一點:複製複雜的字典結構
import sys
def main(argv=()):
# original dictionary
data = {1:{'l1': [1,2,3], 'l2': [2,1,6]}, 2: {'t1': ("w?",2), 't2': ("h!",4)}}
# new values for the innermost keys
newd = {'l1' : 1, 'l2' : 2, 't1' : 3, 't2' : 4}
copy = dict.fromkeys(data.keys(), {})
for k in copy.keys():
copy[k] = dict.fromkeys(data[k].keys(), None)
for k in copy.values():
for e in k.keys():
k[e] = newd[e]
print(data)
print(copy)
if __name__ == "__main__":
sys.exit(main())
所以上面打印的代碼:
{1: {'l2': [2, 1, 6], 'l1': [1, 2, 3]}, 2: {'t1': ('w?', 2), 't2': ('h!', 4)}}
{1: {'l2': 2, 'l1': 1}, 2: {'t1': 3, 't2': 4}}
,這是結果我想到,但上面的代碼似乎太冗長了。有一點需要注意的是,在實際的例子中,最裏面的鍵的值並不那麼簡單,但它們是numpy數組,所以我不想對整個結構進行深層拷貝,然後替換這些值。
請閱讀我的深度複製最後的意見。 – aaragon
對不起,有關numpy數組滑落的內容。但是,我仍然告訴你該怎麼做。去看看複製模塊是如何做的,然後寫出類似的算法,它會考慮你的規格。這是我的答案的精髓。另外,複製模塊非常靈活,您可以控制一些正在進行的複製,特別是在使用自己的對象時。 – Dalen