#python #dictionary #matrix #filter #grid
Вопрос:
У меня есть словарь {(0, 0): [(1, 0), (0, 1)], (0, 1): [(1, 1), (0, 0), (0, 2)], (0, 2): [(1, 2), (0, 1), (0, 3)], (0, 3): [(1, 3), (0, 2), (0, 4)], (0, 4): [(1, 4), (0, 3), (0, 5)], (0, 5): [(1, 5), (0, 4), (0, 6)]}
, ключи или координаты (строка, столбец) кортежей, которые коррелируют с матрицы, значения соседи или рядом (ряд, столбец) пары, которые находятся вблизи этого узла так, например, если (0, 0) является наиболее левом верхнем элемент в сетке узлов возле него (0, 1) и (1, 0), поскольку они являются смежными. Мой вопрос в том, как я могу отфильтровать этот словарь, чтобы вместо кортежей (строк, столбцов) у меня были элементы, соответствующие этой позиции в сетке, так что, скажем (0, 0):[(1, 0), (0, 1)]
, будет равно my_matrix[0][0]:[my_matrix[1][0], my_matrix[0][1]]
и так далее для всего словаря
Ответ №1:
Использование понимания диктанта с пониманием вложенного списка для перебора соседей:
matrix = [[i j for i in range(10)] for j in range(10)]
d = {(0, 0): [(1, 0), (0, 1)], (0, 1): [(1, 1), (0, 0), (0, 2)], (0, 2): [(1, 2), (0, 1), (0, 3)], (0, 3): [(1, 3), (0, 2), (0, 4)], (0, 4): [(1, 4), (0, 3), (0, 5)], (0, 5): [(1, 5), (0, 4), (0, 6)]}
print({
matrix[key[0]][key[1]]:
[matrix[coord[0]][coord[1]] for coord in coords]
for key, coords in d.items()
})
Выход:
{0: [1, 1], 1: [2, 0, 2], 2: [3, 1, 3], 3: [4, 2, 4], 4: [5, 3, 5], 5: [6, 4, 6]}