2016-11-19 58 views
0

在我的作业中,这个问题是要求我创建一个函数,在这个函数中,Python应该创建字典,以长字符串中的某个字母开头的字数是对称的。对称意味着该单词以一个字母开头,并以同一个字母结尾。我不需要此算法的帮助。我绝对知道我的确是对的,但是我只需要解决这个我无法弄清楚的关键错误。我写了d[word[0]] += 1,它是以该特定字母开始的单词的频率加1。字典中的重要错误。如何让Python打印我的字典?

输出应该是这样的(使用我在下面提供的字符串): {'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)) 

回答

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} 
+1

谢谢!这是做到这一点的正确方法!有效!希望我将来不会通过使用你的代码(我从你那里得到的改正部分)得到关键错误, – Jorgan

1

你从来没有真正使用collections.defaultdict,虽然你导入。初始化ddefaultdict(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})