gpt4 book ai didi

python - 根据键中的不同值复制相同的数据并创建嵌套字典

转载 作者:太空宇宙 更新时间:2023-11-03 15:03:56 25 4
gpt4 key购买 nike

我将此输入作为配置文件

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com