Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么';你不能在python字典上工作吗?_Python_Python 3.x_Dictionary - Fatal编程技术网

为什么';你不能在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)