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

标签 python python-2.7 dictionary nested

我将此输入作为配置文件

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/

相关文章:

C# .NET - 是否有一种简单的方法可以通过单个 ZIP 文件中的 XML 文件集合查询相同的 XML 节点?

python - Numpy 标准差属性错误 : 'Float' object has no attribute 'sqrt'

c# - 使用 Json.NET 对派生自 Dictionary<string, T> 的类型 T 进行序列化和反序列化

java - 如何在多边形内添加JLabel?

python - 为什么使用不同的循环方法(Python)循环速度会有很大差异?

Python:如何根据第一列以外的列对 csv 文件进行切片?

python-2.7 - URLError : <urlopen error [SSL: TLSV1_UNRECOGNIZED_NAME] tlsv1 unrecognized name (_ssl. c:590)>

c# - 按键查找字典项后增加字典值

python - 缩进一个空格

python - 如何搜索 yaml 文件中的特定字符串和内容