避免每次迭代都覆盖字典

时间:2021-06-28 11:21:47

标签: python

给定以下代码:

G = {1: [[2, 3], [3, 22], [5, 4]], 2: [[1, 3], [3, 5]], 3: [[2, 3], [1, 22], [5, 20], [4, 9]], 5: [[1, 2], [3, 20], [4, 4]],
     4: [[3, 9], [5, 4]]}
V = {1: 5, 2: 17, 3: 8, 4: 3, 5: 1}
N=2
for i in range(N):
    x=int(input())
    y=int(input())
    for i in range(1,6):
        if i != x:
            if i != y:
                for vertex in V:
                    for node, edges in G.items():
                        if i == vertex:
                            if node == vertex:
                                for weight in edges:
                                    weight[1] += V[vertex]

我希望每次在第一个循环中迭代时字典 G 都保持不变。但是,每次迭代时 G 都会被覆盖,因此我得到错误的输出。我应该向我的代码添加/修改什么,以便 G 在第一个 for 循环的每次迭代后保持不变?

作为参考,这里是我的输出和我想要的输出:

output1: {1: [[2, 8], [3, 27], [5, 9]], 2: [[1, 3], [3, 5]], 3: [[2, 11], [1, 30], [5, 28], [4, 17]], 5: [[1, 3], [3, 21], [4, 5]], 4: [[3, 9], [5, 4]]}

(WRONG) output2: {1: [[2, 8], [3, 27], [5, 9]], 2: [[1, 20], [3, 22]], 3: [[2, 11], [1, 30], [5, 28], [4, 17]], 5: [[1, 4], [3, 22], [4, 6]], 4: [[3, 12], [5, 7]]}

(CORRECT) output2: {1: [[2, 3], [3, 22], [5, 4]], 2: [[1, 20], [3, 22]], 3: [[2, 3], [1, 22], [5, 20], [4, 9]], 5: [[1, 3], [3, 21], [4, 5]], 4: [[3, 12], [5, 7]]}

1 个答案:

答案 0 :(得分:1)

尝试将 from copy import deepcopy 添加到您的导入语句中,然后在您希望 G 的新副本使用的循环开始处写入 G_copy = deepcopy(G) 然后代替 G.items() 使用G_copy.items()

尽管正如其他人指出的那样 - 除非您在此处添加更多代码,否则这将毫无意义,因为除非您在某处使用所有新的 G_copy,否则您将在每次循环后丢弃结果。< /p>