【发布时间】:2017-12-03 01:17:45
【问题描述】:
我将此输入作为配置文件
a = 1
b = 2
c = 3
dat = 4,5
我正在尝试从上面的输入中创建如下格式的嵌套 dict(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"
}
}
正如您在上面看到的,我无法在嵌套 dict 的“数据集”0 和 1 的“dat”键中存储不同的值,即使在分配了不同的列表索引值 z [ 0] & z[1]。 有人可以让我知道我在上面的代码中做错了什么,因此两个数据集中的值更新是不同的。
【问题讨论】:
-
在
d1['0'] = d and d1['1'] = d行中,您实际上是在两者中保存相同的值。 -
@code_byter :是的,这就是我想要创建具有相同数据集的嵌套字典的内容,请参阅上面的预期输出。如果有更好的方法,也请告诉我!
-
@shivrk 你不明白@code_byter 的回答。
d1['0']和d1['1']不是相同 字典,它们是相同 字典- 如果您更改d1['0']['dat'],则与更改d1['1']['dat']相同。 -
您的问题要求不明确。你确定你只会在文件中得到一个包含多个值的行,而且那肯定是文件中的最后一行吗?
-
@RoryDaulton:不,它可以是任何一行(但在我的控制范围内,所以暂时保留它),我只在这里发布了一个示例。我只想创建相同的数据集,它只会以嵌套字典的形式更改一个值。
标签: python python-2.7 dictionary nested