Угу.
Пока не придумал зачем ключам кортежи но буду иметь в виду!
Спасибо!
ZerGНу, предположим, есть у тебя массив данных, представляющих отчет о пинговании каких-то адресов: Ip-адрес, порт, время и пинг и ты их хочешь сгруппировать по адресу и порту, тогда кортеж (адрес, порт) вполне себе годный ключ словаря.
Пока не придумал зачем ключам кортежи но буду иметь в виду!
py.user.nextОчередной бесполезняк:
>>> class List(list): … def __hash__(self): … return id(self)
>>> class List(list): ... def __hash__(self): ... return id(self) ... ... >>> d = {List([1, 2, 3]): 1, List([4, 5, 6]): 2} >>> d[List([1, 2, 3])] Traceback (most recent call last): File "<input>", line 1, in <module> KeyError: [1, 2, 3] >>> List([1, 2, 3]) in d False
RodegastХа-ха-ха.
Списков в ключе быть не может по определению
RodegastЛови ещё одну, я даже не менял ничего
Очередной бесполезняк:
>>> class List(list): ... def __hash__(self): ... return id(self) ... >>> d = {List([1, 2, 3]): 1, List([4, 5, 6]): 2} >>> d {[1, 2, 3]: 1, [4, 5, 6]: 2} >>> >>> for i in d: ... if i == [1, 2, 3]: ... i.pop() ... 3 >>> d {[1, 2]: 1, [4, 5, 6]: 2} >>> >>> for i in d: ... print(i, '->', d[i]) ... [1, 2] -> 1 [4, 5, 6] -> 2 >>> >>> sum(d, []) [1, 2, 4, 5, 6] >>>
RodegastА ты не понимаешь, почему in не работает? Так можно сделать, чтобы работал.
Когда поймёшь что изменяемые типы данных нельзя хешировать, тогда и поговорим.
RodegastНу, ты два раза пропёрся уже: сначала говорил, что их невозможно ключами делать; потом - что если и можно (ха-ха), то это бесполезно.
Такое даже на говнокод не стыдно отправить.

>>> d[List([1, 2, 3])] Traceback (most recent call last): File "<input>", line 1, in <module> KeyError: [1, 2, 3]
RodegastТак у меня готовый вариант лежит ещё с того сообщения, я же знал, что ты не сможешь сделать.
Сначала сделай что-бы вот это работало:
>>> class List(list): ... def __hash__(self): ... return hash(tuple(self)) ... >>> d = {List([1, 2, 3]): 1, List([4, 5, 6]): 2, List([3, 2, 1]): 3} >>> >>> d[List([1, 2, 3])] 1 >>> List([1, 2, 3]) in d True >>> List([1, 2, 4]) in d False >>> d[List([3, 2, 1])] 3 >>>