函数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循环中插入的所有项值都会返回到原始值。
答案 0 :(得分:0)
您的错误是由于"dataGroups": [{
"name": "api-performance",
"urls": [
"/api",
"imagesketches/image/"
],
"cacheConfig": {
"maxAge": "1d",
"strategy": "performance"
}
}]
是可变的。你要做的是:
交换两个元素
使用交换元素获取网格的快照
交换元素。
虽然,如果您使用相同的dict
而不是副本作为快照,则在交换时,您还可以交换快照中的项目。
你应该做的是:
制作网格副本
交换副本中的元素
为此,请使用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
。