猿问

解耦具有相同内存地址的字典

我有以下代码:


results = {'location': [], 'analysis_Elem 1': [], 'analysis_Elem 2': [], 'analysis_Elem 3': []}


def collectResults(step):

    new_results = results

    for key in d: #here, d is another dictionary with a lot of results read from .csv file with the same keys as in the results dictionary

        for line in d[key]:

            if step in line[0]:

                new_results[key].append(float(line[-1].strip())/1000)


    for line in d[key]:

        if step in line[0]:

            new_results['location'].append(float(line[-4].strip()))


    return new_results


res1 = collectResults('Time-step 7')

res2 = collectResults('Time -step 2')

在这个函数中,我试图在一个字典中满足 if 语句时收集结果,该字典由带有相应空列表的键组成。这个想法是每次调用函数 collectResults() 时,我都想获得分配给变量的结果;比如上面的res1,res2。我遇到的问题是 new_results = results 行导致在第二次调用该函数后,字典 new_results(因此也是 res2)包括第二次调用扩展的第一次调用的结果。我知道它们具有相同的内存地址,这就是覆盖的原因。对于列表,可以使用例如 list() 轻松解决。我无法在字典的情况下找到解决方案。需要怎么做才能获得每次调用的解耦结果?


慕斯王
浏览 170回答 2
2回答

红颜莎娜

为什么不在字典上使用 copy() 方法而不是赋值(它只是将新名称绑定到当前字典)?def collectResults(step):    new_results = results.copy()
随时随地看视频慕课网APP

相关分类

Python
我要回答