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
我想将该特定列表字符串转换为常规字符串。
我该怎么做?
答案 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()