Python:为什么数据被插入list / dict的两个dicts中

时间:2017-09-13 14:54:42

标签: python json dictionary nested-lists

我知道这可能是一个非常天真的错误,但现在已经让我很紧张了。

我有一个嵌套词典列表,如

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的{​​{1}}节点 使用data =>

CS10

所以我所做的是:

tempStuff = [{'subject': 'ESD', 'teacherName': 'Aizen', 'venue': 'RN141'}, 'CS10', 2, 'Monday']

我希望添加此代码以添加另一个字典wiz

for i in grs:
    if tempStuff[1] in i.keys():
        i[tempStuff[1]][tempStuff[3]].append({tempStuff[2]: tempStuff[0]})

它确实如此,但它也将此节点添加到 { 2: { 'subject': 'ESD', 'teacherName': 'Aizen', 'venue': 'RN141' } } 。我已经尝试了不同的方法来制作数据,并以不同的方式进行插入,但是这两个节点都发生了变化。

为什么?
对此有何帮助?

修改1

裁剪CS9没有问题,即我已将两个节点中的数据从json移除到Tuesday,以便Friday的可读性问题,因为其他节点在插入时并不重要。所以我只提到json

修改2

似乎在运行期间创建Monday时出现问题我们在这里做的是我们已经通过我们自己声明了grs而在我的代码中grs得到了#34;填充"或者数据插入是由其他循环发生的。条件。一切都完成后,grs与我们在此声明的相同,没有任何变化。即插入后我们得到的grs和我们在此声明的grs完全相同。

编辑3

所以,这里的代码插入了我们神秘的" grs"来自另一个嵌套的dict / list(FinalDict)。

grs

1 个答案:

答案 0 :(得分:1)

我怀疑,这是一个共享的参考问题。在这里:

dataArrange = {}

for g in groups:
    # code here
    dataArrange.update({i: weekdet})
    grs.append({g: dataArrange})

你一遍又一遍地重复使用dataArrange,所以最后每个grs[x]{g}都引用了同一个独特的词典。您必须了解Python 从不隐含地复制任何内容。

解决方案非常简单:不是一遍又一遍地重复使用相同的dataArrange dict,而是每次都创建一个新的。