我知道这可能是一个非常幼稚的错误,但是这已经让我有些不安了。
我有像这样的嵌套字典列表
grs = [{
'CS9': {
'Monday': [{
1: {
'subject': 'ESD',
'teacherName': 'Goku',
'venue': 'RN 141'
}
}, {
3: {
'subject': 'CN',
'teacherName': 'vegita',
'venue': 'RN 102'
}
}, {
5: {
'subject': 'ADA',
'teacherName': 'roshi',
'venue': 'RN 112'
}
}
]
}
}, {
'CS10': {
'Monday': [{
1: {
'subject': 'ESD',
'teacherName': 'Gohan ',
'venue': 'RN 141'
}
}, {
3: {
'subject': 'CN',
'teacherName': 'Saitama',
'venue': 'RN 102'
}
}, {
5: {
'subject': 'ADA',
'teacherName': 'Mob',
'venue': 'RN 112'
}
}
]
}
}
]
简而言之,两个组以
Monday
为节点,而不同的events
在不同的slots
所以,我要做的是更新
Monday
的CS10
节点与数据=>
tempStuff = [{'subject': 'ESD', 'teacherName': 'Aizen', 'venue': 'RN141'}, 'CS10', 2, 'Monday']
所以我要做的是:
for i in grs:
if tempStuff[1] in i.keys():
i[tempStuff[1]][tempStuff[3]].append({tempStuff[2]: tempStuff[0]})
我期望添加此代码以添加另一个字典wiz
{
2: {
'subject': 'ESD',
'teacherName': 'Aizen',
'venue': 'RN141'
}
}
这样做,但是它也将此节点添加到
CS9
。我尝试了不同的方法来制作数据,并以不同的方式进行插入,但是更改发生在两个节点上。为什么?
有什么帮助吗?
编辑1
裁剪的
json
中没有问题,即我已将两个节点中的数据从Tuesday
删除到Friday
,以确保问题中json
的可读性,因为其他节点在插入。所以我只提到了Monday
。编辑2
似乎在运行时创建
grs
时出现了问题,我们在这里所做的是我们自己声明了grs,而在我的代码中grs被“填充”或其他循环发生了数据插入条件。但是,一切完成后,grs与我们在此处声明的不变相同。即,插入后得到的grs
与我们在此处声明的grs
完全相同。编辑3
因此,这是将代码从另一个嵌套的dict /列表(FinalDict)插入我们神秘的“
grs
”中的代码。 dataArrange = {}
for g in groups: # groups is just a list of groups eg CS10, CS9
for i in FinalDict: # the data from which i'm putting the stuff to grs
weekdet = []
for b in FinalDict[i]['lectures']:
lectdetails = []
if b[0] == 'Remedial Class':
slot = b[1]['slot']
else:
slot = b[3]['slot']
subject = b[0]
teacherName = b[1]
venue = b[2]
lectdetails = {'subject': subject, 'teacherName': teacherName, 'venue': venue}
try:
if ShortCode[lectdetails['subject']] in ElectiveStuff:
continue
except IndexError:
continue
if not lectdetails:
weekdet.append({slot: "Remedial Class"})
else:
weekdet.append({slot: lectdetails})
dataArrange.update({i: weekdet})
grs.append({g: dataArrange})
with open('stuff.txt', 'w') as g: # here we wrote grs in a file which makes me sad though it solves the problem
g.write(json.dumps(grs))
最佳答案
我怀疑这是一个共享的参考问题。这里:
dataArrange = {}
for g in groups:
# code here
dataArrange.update({i: weekdet})
grs.append({g: dataArrange})
您一遍又一遍地重复使用
dataArrange
,因此最后grs[x]{g}
都引用了相同的唯一字典。您必须了解Python绝不会隐式复制任何内容。解决方案非常简单:不要一次又一次地重复使用相同的
dataArrange
字典,而是每次创建一个新字典。