【发布时间】:2015-11-08 02:59:52
【问题描述】:
假设您有一本字典,但您想复制几乎整个结构(最里面的字典的值除外)。下面的代码可以做我想做的事,但我确信有一个更聪明的方法来做到这一点:
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 数组,因此我不想对整个结构进行深层复制,然后替换这些值。
【问题讨论】:
标签: python dictionary copy deep-copy