避免每次迭代都覆盖字典

  • 本文关键字:覆盖 字典 迭代 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都会被覆盖,因此我得到了错误的输出。我应该向代码中添加/修改什么,以便在第一个for循环的每次迭代后G保持不变?

作为参考,以下是我的输出和我想要的输出:

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]]}

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

尽管正如其他人所指出的,除非你在这里添加更多的代码,否则这将毫无意义,因为除非你在某个地方使用所有新的G_copy,否则你将在每个循环后丢弃结果。

最新更新