2016-10-24 4 views
0
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 книги, как показано ниже:TypeError: deafultdict должны иметь первые аргументы вызываемые

ржут = parse_neighbors (CONSTR, ПОСРЕДНИКОВ)

где CONSTR является строкой и ВАР сосед,

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

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

ответ

1

Вы должны использовать:

d = defaultdict(list) 

Вместо:

d = defaultdict([]) 

Как сказано в сообщении об ошибке:

TypeError: first argument must be callable

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

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

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

>>> list() 
[] 
>>> 
+0

Теперь ошибка, – shilpi

+0

в parse_neighbors для (A, Aneighbors) в спецификации: ValueError: потребность значение более 1 распаковывать – shilpi

+0

Может кто-нибудь, пожалуйста, помогите? – shilpi

Смежные вопросы