Найти - Пользователи
Полная версия: TypeError: unhashable type: 'dict'
Начало » Python для новичков » TypeError: unhashable type: 'dict'
1
nokados
Пытааюсь убрать одинаковые элементы при помощи
robots=list(set(robots)
где robots это
for i in range(nr):
    s=raw_input().split()
    robots.append({'city':s[0], 'v':s[1], 'color':i})

Выдается ошибка
Traceback (most recent call last):
File "C:\scripts\graph2\task.py", line 19, in <module>
robots=list(set(robots))
TypeError: unhashable type: 'dict'

Верно ли я понимаю, что она означает, что множества не могут содержать словари?
Как исправить эту ошибку?
bismigalis
на stackowerflow есть ответ

TL;DR
тебе надо сделать свой FrozenDict отнаследовавшись от dict
Budulianin
nokados
Как исправить эту ошибку?
result = []
lst = [{1: 1, 2: 0, 3: 3}, {1: 0, 2: 2, 3: 3}, {1: 1, 2: -2, 3: 0}, {1: 1, 2: 2, 3: 3},{1: 1, 7: 0, 3: 3}, {1: 1, 2: 2, 3: 3},{1: 1, 2: 0, 3: 3}, {1: 1, 2: 2, 3: 3},]
for elem in lst:
    if not filter(lambda x: elem == x, result):
        result.append(elem)

print(result)
[{1: 1, 2: 0, 3: 3}, {1: 0, 2: 2, 3: 3}, {1: 1, 2: -2, 3: 0}, {1: 1, 2: 2, 3: 3}, {1: 1, 3: 3, 7: 0}]

Budulianin
nokados
Верно ли я понимаю, что она означает, что множества не могут содержать словари?
>>> hash({1:1})
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'dict'
bismigalis
можешь еще попробовать namedtuple вместо dict
nokados
Всем спасибо, проблему решил.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB