我将此输入作为配置文件
a = 1
b = 2
c = 3
dat = 4,5
我正在尝试从上面的输入创建一个格式如下的嵌套字典(d1{}):
{
"0": {
"a ": "1",
"b ": "2",
"c": "3",
"dat": "4"
},
"1": {
"a ": "1",
"b ": "2",
"c": "3",
"dat": "5"
}
}
下面是我正在使用的Python代码,
import json
data_file = "Dataset" # as above input data from a file
d = {}
d1 = {}
with open(data_file) as f:
for line in f:
(key, val) = line.strip().split('=')
d[key] = val
l1 = d['dat']
z = l1.strip(' ').split(',')
d.pop('dat')
d1['0'] = d
d1['1'] = d
d1['0']['dat']= z[0]
d1['1']['dat']= z[1]
print d1
这是我得到的输出/结果如下,而不是我所期望的上面给出的
{
"0": {
"a ": "1",
"b ": "2",
"c": "3",
"dat": "5"
},
"1": {
"a ": "1",
"b ": "2",
"c": "3",
"dat": "5"
}
}
正如您在上面看到的,我无法在嵌套字典的“数据集”0 和 1 的“dat”键中存储不同的值,即使在分配列表索引 z[ 的不同值之后,它似乎也是相同的0] 和 z[1]。 有人可以让我知道我在上面的代码中做错了什么,所以当两个数据集中的值更新时是不同的。
最佳答案
问题是Python从不隐式地复制对象。 当你这样做时
d1['0'] = d
d1['1'] = d
d1['0'] 和 d1['1'] 成为对 d 的引用。
因此 d、d1['0'] 和 d1['1'] 引用相同的对象。
因此,当您更改 d 时,d1['0'] 和 d1['1'] 也会更改。此外,当您更改 d1['0'] 和 d1['1'] 中的一个时,另一个也会更改。
要实际创建字典的副本,您可以使用 dict.copy 方法:
d1['0'] = d.copy()
d1['1'] = d.copy()
或者你可以使用 dict() 构造函数:
d1['0'] = dict(d)
d1['1'] = dict(d)
关于python - 根据键中的不同值复制相同的数据并创建嵌套字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44823423/