У меня есть функция генератора, который вычисляет некоторые позиции среза в виде Numpy массива следующим образом:Сохранение кортежа из генератора словаря в Python
import numpy as np
from itertools import product
def __get_slices(data_shape, start, offset, width, patch_size):
start_indices = [range(start[d] - offset if (start[d] - offset) >= 0 else 0,
start[d] - offset + width
if (start[d] - offset + width) <= data_shape[d]
else data_shape[d])
for d in range(len(data_shape))]
start_coords = product(*start_indices)
for start_coord in start_coords:
yield tuple(slice(coord, coord + patch_size) for coord in start_coord)
Теперь я хотел бы сохранить этот сгенерированный кортеж в словаре, который barfs с a TypeError
исключение, потому что я предполагаю, что объект slice
- mutable
. Есть ли способ сделать его неизменным через некоторые функции python и сохранить его в словаре?
На python2.7, я получаю следующее сообщение об ошибке при попытке назначить его в словарь:
TypeError: unhashable type
А, объекты ломтика действительно не сотрясаются, с целью: [Почему объекты среза не хешируются в python] (// stackoverflow.com/q/29980786) –
@cxw: 'TypeError: unhashable type: 'slice'' будет быть ошибкой. Я могу, конечно, воспроизвести это. –
@MartijnPieters А это интересно. Я попытаюсь использовать метод 'reduce', как показано в этом потоке, поскольку мы :;/ – Luca