在我的作业中,这个问题要求我创建一个函数,Python应该创建一个字典,表示以长字符串中某个字母开头的单词是对称的。对称意味着单词以一个字母开头,以相同的字母结尾。我不需要这个算法的帮助。我当然知道我做对了,但是我只需要解决这个我无法弄清楚的Key错误。我写了d[word[0]] += 1
,即将以该特定字母开头的单词的频率加1。
输出应该如下所示(使用我在下面提供的字符串):
{'d': 1, 'i': 3, 't': 1}
t = '''The sun did not shine
it was too wet to play
so we sat in the house
all that cold cold wet day
I sat there with Sally
we sat there we two
and I said how I wish
we had something to do'''
def symmetry(text):
from collections import defaultdict
d = {}
wordList = text.split()
for word in wordList:
if word[0] == word[-1]:
d[word[0]] += 1
print(d)
print(symmetry(t))
答案 0 :(得分:1)
尽管您导入了collections.defaultdict
,但实际上并没有使用d
。将defaultdict(int)
初始化为{}
,而不是def symmetry(text):
from collections import defaultdict
d = defaultdict(int)
wordList = text.split()
for word in wordList:
if word[0] == word[-1]:
d[word[0]] += 1
print(d)
print(symmetry(t))
,您就可以了。
defaultdict(<class 'int'>, {'I': 3, 't': 1, 'd': 1})
结果:
try {
int a = 1/0;
}
catch(Exception e) {
System.out.println("Exception block"+e);
}
finally {
System.out.println("Inside Finally block");
}
}
答案 1 :(得分:1)
您正在尝试增加尚未创建的条目的值,从而导致KeyError
。当没有密钥输入时,您可以使用get()
;默认值为0
(或您选择的任何其他值)。使用此方法,您不需要defaultdict
(虽然在某些情况下非常有用)。
def symmetry(text):
d = {}
wordList = text.split()
for word in wordList:
key = word[0]
if key == word[-1]:
d[key] = d.get(key, 0) + 1
print(d)
print(symmetry(t))
示例输出
{'I': 3, 'd': 1, 't': 1}