如何使用交换项保留字典副本?

时间:2018-05-28 23:04:29

标签: python dictionary

函数swap_elements必须交换dict中的元素,并在交换元素之前保留结果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

我将更改后的网格值正确插入for循环中的modified_grids_1字典中。但是在for循环之外,for循环中插入的所有项值都会返回到原始值。

1 个答案:

答案 0 :(得分:0)

您的错误是由于"dataGroups": [{ "name": "api-performance", "urls": [ "/api", "imagesketches/image/" ], "cacheConfig": { "maxAge": "1d", "strategy": "performance" } }] 是可变的。你要做的是:

  1. 交换两个元素

  2. 使用交换元素获取网格的快照

  3. 交换元素。

  4. 虽然,如果您使用相同的dict而不是副本作为快照,则在交换时,您还可以交换快照中的项目。

    你应该做的是:

    1. 制作网格副本

    2. 交换副本中的元素

    3. 为此,请使用dict

      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