我正在尝试比较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
我是编程的新手。有人帮我解决这个简单的问题吗?我之前无法存储密钥,因为我不知道字符串及其频率中会出现哪些字。
答案 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
循环中交换string1
和for
。您应该遍历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