TypeError:' list'对象不可调用:为什么?

时间:2016-03-12 18:17:06

标签: python list

from difflib import get_close_matches

order_output = {
    "initiate ion drive" : "Initiating the ion drive.",
    "run" : "Running",
    "eat" : "Eating",
    "enter coords to" : "Settings coords to:"
}


orders_list = ["initiate ion drive", "eat", "run", "enter coords to"]

def ord_input():
    order = input()
    order1 = get_close_matches(order, orders_list)
    order2 = ''.join(map(order1, order_output))
    if order:               ^#the problem
        print(order_output[order1])
    else:
        print("Don't know this order.")

ord_input()

这是错误:

Traceback (most recent call last):
  File "C:/Python34/order.py", line 16, in <module>
    ord_input()
  File "C:/Python34/order.py", line 11, in ord_input
    order2 = ''.join(map(order1, order_output))
TypeError: 'list' object is not callable

我想将该特定列表字符串转换为常规字符串。

我该怎么做?

3 个答案:

答案 0 :(得分:1)

difflib.get_close_matches返回一个列表。 map内置函数将函数作为其第一个参数,并将其应用于作为第二个参数的iterable的每个元素。因此,您尝试将列表作为函数调用,即TypeError。列表不可调用。

如果目标是索引order_output字典,请直接进行索引。

order2 = order_output[order1]

答案 1 :(得分:0)

map()函数有两个参数:一个函数和一个可迭代的列表。在第11行,当第一个参数应该是一个函数时,你将get_close_matches函数返回的列表作为参数。有关map()函数的更多信息,请转到:https://docs.python.org/2/library/functions.html#map

答案 2 :(得分:0)

正如评论和其他答案中所提到的,get_close_matches会返回一个列表。也许尝试循环匹配并检查它是否在您的字典中。

另外,真的不确定这条线应该实现什么,因为你不能map除了函数之外的任何东西而order2没有被使用。

order2 = ''.join(map(order1, order_output))

无论如何,这是我认为你应该做的事情

from difflib import get_close_matches

order_output = {
    "initiate ion drive" : "Initiating the ion drive.",
    "run" : "Running",
    "eat" : "Eating",
    "enter coords to" : "Settings coords to:"
}


orders_list = ["initiate ion drive", "eat", "run", "enter coords to"]

def ord_input():
    order = input('Order: ')

    matches = get_close_matches(order, orders_list)
    for m in matches:
        if m in order_output:
            print(order_output[m])
        else:
            print("Don't know order {}.".format(m))

ord_input()