如何解决这个字典KeyError?

时间:2017-04-19 14:55:55

标签: python text

我正在尝试比较SecurityException中的string2字词,如果找到它们,我会尝试将该字及其频率添加到字典中。但是我收到了这个错误,这意味着密钥不存在。

string1

我收到了这个错误。

string1 = 'here i i go and will see see sun'
string2 = 'i will go'
found = {}
new_words = {}

for word in string2.split():
    if word in string1.split():
        found[word] += 1
    else:
        new_words[word] +=1

我正在尝试将Expect输出为:这些是由KeyError: 'i' 组成的单词,它们位于string2及其频率中:

string1

found {'i': 2, 'will': 1, 'go': 1} 是那些不在new_words但是在string2中的字词,因此它们是string1

new_words

我是编程的新手。有人帮我解决这个简单的问题吗?我之前无法存储密钥,因为我不知道字符串及其频率中会出现哪些字。

5 个答案:

答案 0 :(得分:1)

您正在尝试添加字典中可能存在或不存在的值。请改用get()以确保安全执行:

found[word] = found.get(word, default=0) + 1

new_words[word] = new_words.get(word, default=0) + 1

答案 1 :(得分:1)

还有一个选项 - 您可以使用defaultdict

from collections import defaultdict

string1 = 'here i go and i will see sun and enjoy the sunny day'
string2 = 'i will not go'
found = defaultdict(int)
new_words = defaultdict(int)
for word in string2.split():
    if word in string1.split():
        found[word] += 1
    else:
        new_words[word] +=1

<强>更新

要解决第二个问题,您应该在string2循环中交换string1for。您应该遍历string1中的所有字词,并在string2中查看它们。

from collections import defaultdict

string1 = 'here i go and i will see sun and enjoy the sunny day'
string2 = 'i will not go'
found = defaultdict(int)
new_words = defaultdict(int)

for word in string1.split():
    if word in string2.split():
        found[word] += 1
    else:
        new_words[word] +=1

found
Out[66]: defaultdict(int, {'go': 1, 'i': 2, 'will': 1})

new_words
Out[67]: 
defaultdict(int,
            {'and': 2,
             'day': 1,
             'enjoy': 1,
             'here': 1,
             'see': 1,
             'sun': 1,
             'sunny': 1,
             'the': 1})

答案 2 :(得分:1)

您不能增加尚不存在的整数值,这是第一次遇到该单词时的情况。

for word in string2.split():
    if word in string1.split():
        if word not in found.keys():
            found[word] = 1
        else:
            found[word] += 1
    else:
        if word not in new_words.keys():
            new_words[word] = 1
        else:
            new_words[word] += 1

答案 3 :(得分:0)

您正在尝试增加(+1)您的词典中不存在的密钥。您应该首先检查密钥是否存在。用:

if key in dict:
     dict[key]+=1
else:
     dict[key]=1

答案 4 :(得分:0)

你得到一个KeyError因为密钥还没有(found[word] += 1),你可能想要使用:

string1 = 'here i go and i will see sun and enjoy the sunny day'
string2 = 'i will not go'
found = {}
new_words = {}

for word in string1.split():
    if word in string2.split():
        if word in found:
            found[word] += 1
        else:
            found[word] = 1
    else:
        if word in new_words:
            new_words[word] +=1
        else:
            new_words[word] = 1