Python中的字典:对查找键返回的值求和

1 投票
2 回答
1405 浏览
提问于 2025-04-17 17:42

我刚开始学习Python,所以这可能很简单。我想找出字典中与键匹配的值,并把它们加起来。我写了代码来找到这些值,并且可以打印出来(我在在线Python Tutor上测试过,看看会发生什么)。但是我不知道怎么把这些值加起来,得到一个总分(6)。我知道现在这还不是一个函数。

    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 ='tact'
score =0

for i in range(len(word)):
    for letter,score in SCRABBLE_LETTER_VALUES.items():
        if letter == word[i]:
            print score

2 个回答

5
>>> sum(SCRABBLE_LETTER_VALUES[l] for l in word)
6

这里:

  1. for l in word 是在遍历 word 这个单词里的每一个字母;
  2. SCRABBLE_LETTER_VALUES[l] 是在获取 SCRABBLE_LETTER_VALUES 这个字典里对应字母的分数;
  3. sum(...) 是在把这些分数加起来。

sum() 里面的这个结构叫做 生成器表达式

1

如果我是你,我会使用这段代码:

score = 0
word = 'tact'
for letter in word:
    score += SCRABBLE_LETTER_VALUES[letter]
print score

还有更有效的方法,比如NPE提到的那个,但如果你只是个初学者,我更推荐使用(并理解)这个方法。


上面的代码逐行解释:

1) 首先,我们用一个for循环来遍历你输入的word中的每一个字母:

for letter in word:

2) 对于每一个字母,我们把score这个变量增加你在SCRABBLE_LETTER_VALUES中定义的相应分值,像这样:

score = score + SCRABBLE_LETTER_VALUES[letter]

这可以用更简单的方式写成+=

score += SCRABBLE_LETTER_VALUES[letter]

3) 最后,我们打印出分数:

print score

撰写回答