Словарь со списками: TypeError: unhashable тип: 'list' - PullRequest
1 голос
/ 29 марта 2020

У меня есть такой метод:

def satisfied(self, assignment: Dict[str, List[str]]) -> bool:
        row: str = self.variables[0]
        column: str = self.variables[1]

        # If either variable is not in the assignment then it is not
        # yet possible for them to conflict
        if row not in assignment or column not in assignment:
            return True

        row_num: int = int(row[3:])
        col_num: int = int(column[3:])

        return assignment[row][col_num] == assignment[col][row_num] # here is this error

, и он называется так:

def revise_during_search(self, x: V, y: V, value: D, constraint: Constraint[V, D], purged_values: Dict[V, List[D]]) -> bool:
        revised: bool = False
        for val in self.domains[y]: # val is also type of D
            if not constraint.satisfied({x: value, y: val}):
            ... something happens here

Итак, как вы можете видеть V это str nad D is List[str].

Когда вызывается метод satisfied, я получаю такую ​​ошибку:

File "file.py", line 87, in satisfied
    return assignment[row][col_num] == assignment[col][row_num]
TypeError: unhashable type: 'list'

Но я не понимаю, потому что когда я вызываю assignment[row], где row это строка, которая дает мне List, и я использую col_num, это число, чтобы получить конкретное c значение.

1 Ответ

2 голосов
/ 29 марта 2020

наиболее вероятно self.variables[0] или self.variables[1] - это список, и вы не можете использовать эту строку:

if row not in assignment or column not in assignment:

ex поиска списка в диктовке:

[123] in {1: 2}

output:

TypeError: unhashable type: 'list'

также вы можете проверить свою переменную col, которая не определена в вашей функции, это может быть list

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...