Ошибка типа: у deafultdict должны быть вызываемые первые аргументы

#python

#python

Вопрос:

 def parse_neighbors(neighbors, vars):
    """Convert a string of the form 'X: Y Z; Y: Z' into a dict mapping
    regions to neighbors.  The syntax is a region name followed by a ':'
    followed by zero or more region names, followed by ';', repeated for
    each region name.  If you say 'X: Y' you don't need 'Y: X'.
    >>> parse_neighbors('X: Y Z; Y: Z')
    {'Y': ['X', 'Z'], 'X': ['Y', 'Z'], 'Z': ['X', 'Y']}
    """
    dict = defaultdict([])
    for var in vars:
        dict[var] = []
    specs = [spec.split(':') for spec in neighbors.split(';')]
    for (A, Aneighbors) in specs:
        A = A.strip();
        dict.setdefault(A, [])
        for B in Aneighbors.split():
            dict[A].append(B)
            dict[B].append(A)
    return dict
  

Когда я вызываю этот фрагмент из книги AIMA, как показано ниже:

neigh = parse_neighbors(constr, переменные)

где constr — строка, а vars — соседний параметр,

Я получаю ошибку ниже: dict = defaultdict ([]) Ошибка типа: первый аргумент должен быть вызываемым

Пожалуйста, помогите!!!

Ответ №1:

Вам нужно использовать:

 d = defaultdict(list)
  

Вместо:

 d = defaultdict([])
  

Как говорится в сообщении об ошибке:

Ошибка типа: первый аргумент должен быть вызываемым

[] не вызываемый, это пустой список.

 >>> []()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'list' object is not callable
>>> 
  

list является вызываемым. Обратите внимание, что происходит при его вызове:

 >>> list()
[]
>>> 
  

Комментарии:

1. в parse_neighbors для (A, Aneighbors) в спецификациях: ошибка значения: для распаковки требуется более 1 значения

2. Кто-нибудь, пожалуйста, может помочь?

3. @user3358669 Это другой вопрос. Задайте новый вопрос, поскольку он не относится к теме этого.

4. Кажется, я не могу опубликовать новый вопрос, поскольку существует ограничение. Если у кого-нибудь есть какие-либо идеи, пожалуйста, поделитесь в разделе комментариев.

5. @user3358669 трудно сказать, не видя входных данных, но по сути это означает, что в одном из подсписков в specs есть только один элемент, поэтому вы не можете распаковать его в (A, Aneighbors)