如何保留已交换项目的字典副本?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (45)

函数swap_elements必须交换元素dict并保留结果的快照,然后交换元素以保持原始原样。

举例来说:

swap_elements({0: [1, 2], 1: [3, 4]}, [(0, 1), (1, 0)], (0, 0))

应该返回

{'entry 0': {0 :[2, 1], 1: [3, 4]},
 'entry 1': {0: [3, 2], 1: [1, 4]}

这是代码

def swap_elements(grid, new_positions, current_x_y):
    modified_grids_1 = {}
    i = 0
    # original = grid
    for pos in new_positions:
        # print(pos[0], pos[1], current_x_y[0], current_x_y[1])
        # print(grid[pos[0]][pos[1]], grid[current_x_y[0]][current_x_y[1]])
        grid[pos[0]][pos[1]], grid[current_x_y[0]][current_x_y[1]] = grid[current_x_y[0]][current_x_y[1]], grid[pos[0]][pos[1]]
        # print_grid(grid)

        modified_grids_1.update({"entry "+str(i): grid})
        # print_grid(modified_grids[i])
        i += 1
        grid[current_x_y[0]][current_x_y[1]], grid[pos[0]][pos[1]] = grid[pos[0]][pos[1]], grid[current_x_y[0]][current_x_y[1]]
        # print_grid(grid)
    print(modified_grids_1)
    # for k in modified_grids.keys():
    #     print_grid(modified_grids.get(k))
    return modified_grids_1

将改变后的网格值正确插入modified_grids_1for循环的库中。但在for循环之外,for循环中插入的所有项值都会回到原始值。

提问于
用户回答回答于

你的错误是由于dict是可变的。你想要做的是:

  1. 交换两个元素
  2. 获取交换元素的网格快照
  3. 交换元素。

尽管如果使用的是快照dict而不是副本,但在交换时也可以交换快照中的项目。

应该做的是:

  1. 制作网格的副本
  2. 交换副本中的元素

要做到这一点,请使用copy.deepcopy

import copy

def swap_elements(grid, new_positions, current_x_y):
    modified_grids_1 = {}

    for i, pos in enumerate(new_positions):

        # Make a copy of the grid beforehand
        modified_grid = copy.deepcopy(grid)

        modified_grid[pos[0]][pos[1]], modified_grid[current_x_y[0]][current_x_y[1]] = grid[current_x_y[0]][current_x_y[1]], grid[pos[0]][pos[1]]

        modified_grids_1["entry "+str(i)] = copy.deepcopy(modified_grid)

    print(modified_grids_1)

    return modified_grids_1

swap_elements({0: [1, 2]}, [(0,0)], (0, 1))  # {'entry 0': {0: [2, 1]}}

例如使用enumerate跟踪输入号码而不是递增变量,并使用项目分配而不是dict.update

所属标签

可能回答问题的人

  • 腾讯云数据库 TencentDB

    腾讯云 · 产品团队 (已认证)

    302 粉丝2 提问51 回答
  • EatRice

    17 粉丝0 提问183 回答
  • 华讯云

    1 粉丝0 提问156 回答
  • 成都加米谷大数据

    11 粉丝0 提问16 回答

扫码关注云+社区

领取腾讯云代金券