为什么';你不能在python字典上工作吗?
如何在词典中实现深度复制 我的原始代码:为什么';你不能在python字典上工作吗?,python,python-3.x,dictionary,Python,Python 3.x,Dictionary,如何在词典中实现深度复制 我的原始代码: li1 = ['Column_6', 'Column_11'] delimiters = ['a','b','c','d'] inner_dict = dict.fromkeys(delimiters,[0,0]) delim_dict = dict.fromkeys(li1 ,None) for k,v in delim_dict.items(): delim_dict[k] = copy.deepcopy(inner_dict) 打印(d
li1 = ['Column_6', 'Column_11']
delimiters = ['a','b','c','d']
inner_dict = dict.fromkeys(delimiters,[0,0])
delim_dict = dict.fromkeys(li1 ,None)
for k,v in delim_dict.items():
delim_dict[k] = copy.deepcopy(inner_dict)
打印(delim_dict)给出
给予
为什么尽管有deepcopy,键b、c、d仍更新为[5,0]
我能够使用修改后的代码实现以下结果:
li1 = ['Column_6', 'Column_11']
delimiters = ['a','b','c','d']
#inner_dict = dict.fromkeys(delimiters,[0,0])
delim_dict = dict.fromkeys(li1 ,None)
for k,v in delim_dict.items():
delim_dict[k] = {}
for delim in delimiters:
delim_dict[k][delim]=[0,0]
但是,如何使用深度复制实现相同的结果,或者有其他有效的方法吗
注:
我尝试了以下链接:
运气不好。您使用的列表对象与所有
内部dict
值相同,deepcopy
尊重并保持这种方式。这显然是你不想要的。所以一开始不要这样做。请改为对分隔符中的d执行internal_dict={d:[0,0]
正如上面所说:
所有的值都只引用一个实例,所以将值设置为可变对象(如空列表)通常没有意义。要获得不同的值,请使用dict理解
您可以尝试以下方法:
li1 = ['Column_6', 'Column_11']
delimiters = ['a','b','c','d']
inner_dict = dict.fromkeys(delimiters,[0,0])
delim_dict = dict.fromkeys(li1 ,None)
for k,v in delim_dict.items():
delim_dict[k] = {key: value[:] for key, value in inner_dict.items()}
print (delim_dict)
delim_dict['Column_6']['a'][0]=5
print (delim_dict)
使用[:]拼接且不使用复制模块所以您想要拥有字典分隔符的深度副本?正如我看到的,这里没有定义任何data
,内文有数据{'a':[0,0],'b':[0,0],'c':[0,0],'d':[0,0]}对吗?很抱歉,如果我错过了您的问题要复制词典,您需要导入副本a={1:2,3:4}
b=copy.deepcopy(a)
您还可以在问题中添加数据
变量,这样我们就知道会发生什么。如果我运行您的代码,它将显示数据
未初始化,我们可能会错误地假设数据
中的数据将被执行:copy.deepcopy(内部命令)。不工作。我想你可以这样做,但是有那么糟糕的内心世界似乎是不必要的危险。
{'Column_6': {'a': [5, 0], 'b': [5, 0], 'c': [5, 0], 'd': [5, 0]},
'Column_11': {'a': [0, 0], 'b': [0, 0], 'c': [0, 0], 'd': [0, 0]}}
li1 = ['Column_6', 'Column_11']
delimiters = ['a','b','c','d']
#inner_dict = dict.fromkeys(delimiters,[0,0])
delim_dict = dict.fromkeys(li1 ,None)
for k,v in delim_dict.items():
delim_dict[k] = {}
for delim in delimiters:
delim_dict[k][delim]=[0,0]
li1 = ['Column_6', 'Column_11']
delimiters = ['a','b','c','d']
inner_dict = dict.fromkeys(delimiters,[0,0])
delim_dict = dict.fromkeys(li1 ,None)
for k,v in delim_dict.items():
delim_dict[k] = {key: value[:] for key, value in inner_dict.items()}
print (delim_dict)
delim_dict['Column_6']['a'][0]=5
print (delim_dict)