使用变量作为字典键,是否可能?

时间:2018-04-01 09:12:29

标签: python dictionary

我有一个字典,每个字母都有相应的值。我需要通过一个字符串来计算所有字母的总和'值。

    SCRABBLE_LETTER_VALUES = {
'a': 1, 'b': 3, 'c': 3, 'd': 2, 'e': 1, 'f': 4, 'g': 2, 'h': 4, 'i': 1, 'j': 8, 'k': 5, 'l': 1, 'm': 3, 'n': 1, 'o': 1, 'p': 3, 'q': 10, 'r': 1, 's': 1, 't': 1, 'u': 1, 'v': 4, 'w': 4, 'x': 8, 'y': 4, 'z': 10
} 
word = 'maths'
for letter in word:
    score += SCRABBLE_LETTER_VALUES[letter]

输出score应该是与word中的字母对应的任何值的总和。但我不能让Python理解我是通过变量类型字符串调用键。

你有什么解决方案?任何帮助表示赞赏!

6 个答案:

答案 0 :(得分:3)

  • 您忘记将score变量初始化为0.

  • 代码:

    SCRABBLE_LETTER_VALUES = {'a': 1, 'b': 3, 'c': 3, 'd': 2, 'e': 1, 
                             'f': 4, 'g': 2, 'h': 4, 'i': 1, 'j': 8, 
                             'k': 5, 'l': 1, 'm': 3, 'n': 1, 'o': 1, 
                             'p': 3, 'q': 10, 'r': 1, 's': 1, 't': 1, 
                             'u': 1, 'v': 4, 'w': 4, 'x': 8, 'y': 4, 'z': 10} 
    
    score = 0    #  ============ > the line to be added
    word = 'maths'
    for letter in word:
        score += SCRABBLE_LETTER_VALUES[letter]
    
    print(score)
    
  • 输出:
    10

  • 如果您没有初始化变量,则会收到以下错误: NameError: name 'variable' is not defined ...这意味着您在初始化之前使用变量并且它是错误的

答案 1 :(得分:2)

python中的内置函数sum()接受理解。您的代码可以简化为:

SCRABBLE_LETTER_VALUES = {'a': 1, 'b': 3, 'c': 3, 'd': 2, 'e': 1, 
                     'f': 4, 'g': 2, 'h': 4, 'i': 1, 'j': 8, 
                     'k': 5, 'l': 1, 'm': 3, 'n': 1, 'o': 1, 
                     'p': 3, 'q': 10, 'r': 1, 's': 1, 't': 1, 
                     'u': 1, 'v': 4, 'w': 4, 'x': 8, 'y': 4, 'z': 10}

word = 'maths'
score = sum(SCRABBLE_LETTER_VALUES[i] for i in word.lower()) # use lower for small letters

print(score)

你得到:

10

答案 2 :(得分:2)

您可以尝试使用地图方法:

print(sum(map(lambda x:SCRABBLE_LETTER_VALUES[x],word)))

输出:

10

答案 3 :(得分:1)

在for-loop之前添加行score = 0

答案 4 :(得分:0)

在使用之前,您需要将score设置为零

答案 5 :(得分:-1)

此外,您可能想要制作'字'通过将其变为输入值来变量更具动态性:

SCRABBLE_LETTER_VALUES = {'a': 1, 'b': 3, 'c': 3, 'd': 2, 'e': 1, 
                     'f': 4, 'g': 2, 'h': 4, 'i': 1, 'j': 8, 
                     'k': 5, 'l': 1, 'm': 3, 'n': 1, 'o': 1, 
                     'p': 3, 'q': 10, 'r': 1, 's': 1, 't': 1, 
                     'u': 1, 'v': 4, 'w': 4, 'x': 8, 'y': 4, 'z': 10}

score = 0
#Make sure to force a lowercase
word = str(input("What word would you like to enter?").lower())
for letter in word:
     score += SCRABBLE_LETTER_VALUES[letter]
print(score)