我正在尝试循环输入字符串的元素,并从字典中获取它们。我做错了什么?
number_map = { 1: -3, 2: -2, 3: -1, 4: 1, 5: 2, 6: 3 }
input_str = raw_input("Enter something: ")
strikes = [number_map(int(x)) for x in input_str.split()]
strikes = [number_map(int(x)) for x in input_str.split()]
TypeError: 'dict' object is not callable
答案 0 :(得分:45)
给定密钥访问字典的语法是number_map[int(x)]
。 number_map(int(x))
实际上是函数调用,但由于number_map
不是可调用的,因此会引发异常。
答案 1 :(得分:16)
使用方括号访问字典。
strikes = [number_map[int(x)] for x in input_str.split()]
答案 2 :(得分:9)
您需要使用[]
来访问字典的元素。不是()
number_map = { 1: -3, 2: -2, 3: -1, 4: 1, 5: 2, 6: 3 }
input_str = raw_input("Enter something: ")
strikes = [number_map[int(x)] for x in input_str ]
答案 3 :(得分:6)
strikes = [number_map[int(x)] for x in input_str.split()]
使用方括号来浏览字典。
答案 4 :(得分:4)
strikes = [number_map[int(x)] for x in input_str.split()]
您使用 []
括号从 dict 获取元素,而不是 ()
。
答案 5 :(得分:4)
您需要使用:
number_map[int(x)]
注意方括号!
答案 6 :(得分:1)
它是number_map[int(x)]
,你试图用一个参数实际调用地图
答案 7 :(得分:0)
将“()”更改为“ []”,因为“()”用于功能
答案 8 :(得分:0)
更实用的方法是使用dict.get
input_nums = [int(in_str) for in_str in input_str.split())
strikes = list(map(number_map.get, input_nums.split()))
可以看到转换有点笨拙,最好使用function composition的抽象:
def compose2(f, g):
return lambda x: f(g(x))
strikes = list(map(compose2(number_map.get, int), input_str.split()))
Example:
list(map(compose2(number_map.get, int), ["1", "2", "7"]))
Out[29]: [-3, -2, None]
很显然,在Python 3中,您将避免显式转换为list
。可以在here中找到更通用的Python函数组合方法。
(备注:我来自Design of Computer Programs Udacity类,来写:)
def word_score(word):
"The sum of the individual letter point scores for this word."
return sum(map(POINTS.get, word))