2

我正在编写一个代码,它将遍历单词中的每个单词,在字典中查找它们,然后将字典值附加到计数器。但是,如果我打印计数器,我只会从我的 if 语句中获得最后一个数字(如果有的话)。如果我将打印计数器放在循环中,那么我会得到每个单词的所有数字,但没有总值。我的代码如下:

dictionary = {word:2, other:5, string:10}
words = "this is a string of words you see and other things"
if word in dictionary.keys():
   number = dictionary[word]
   counter += number
   print counter

我的例子会给我:

[10]
[5]

虽然我想要15,但最好在循环之外,就像在现实生活中的代码中一样,单词不是单个字符串,而是许多正在循环的字符串。谁能帮我这个?

4

3 回答 3

5

这是一个非常简单的示例,它打印15

dictionary = {'word': 2, 'other': 5, 'string': 10}
words = "this is a string of words you see and other things"

counter = 0
for word in words.split():
    if word in dictionary:
        counter += dictionary[word]
print counter

请注意,您应该counter=0在循环之前声明并使用word in dictionary而不是word in dictionary.keys().

您也可以使用以下命令在一行中编写相同的内容sum()

print sum(dictionary[word] for word in words.split() if word in dictionary)

或者:

print sum(dictionary.get(word, 0) for word in words.split())
于 2013-08-17T22:18:33.460 回答
1

您应该在循环外声明计数器。您在代码中执行的其他所有操作都是正确的。正确的代码:

dictionary = {word:2, other:5, string:10}
words = "this is a string of words you see and other things"
counter = 0
if word in dictionary.keys():
   number = dictionary[word]
   counter += number

print counter
于 2013-08-17T22:19:46.123 回答
1

我不确定你在用那个代码做什么,因为我在那里看不到任何循环。但是,一种做你想做的事情的方法如下:

sum(dictionary[word] for word in words.split() if word in dictionary)
于 2013-08-17T22:20:52.710 回答