在字典中累积多个结果

Accumulating Multiple Results In a Dictionary

问题如下: 从字符串 stri 创建一个名为 char_d 的字典,这样键就是一个字符,值就是它出现的次数。

这是我试过的代码:

stri = "what can I do"
char_d={}
lst=stri.split()
for wrd in lst:
    for c in wrd:
        if c not in char_d:
        char_d[c]=0
    char_d[c]+=1

我得到的输出是:

[('h', 1), ('o', 1), ('c', 1), ('t', 1), ('n', 1), ('d', 1), ('I', 1), ('a', 2), ('w', 1)]

预期值应包括: (' ',3)

我认为该值应该包括 space 但我们如何做到这一点?

stri = "what can I do"
char_d={}
#lst=stri.split()
#for wrd in stri:
for c in stri:
   if c not in char_d:
      char_d[c]=0
   char_d[c]+=1

我想我找到了解决方案,但如果有任何进一步的解释,我将不胜感激。

您提出的建议有效。您可以使用字典的 get 方法更加 pythonic。

stri = "what can I do"
char_d={}
#lst=stri.split()
#for wrd in stri:
for c in stri:
   char_d[c] = char_d.get(c, 0) + 1
如果字典中不存在 c,

get(c, 0) 将 return 0。

您也可以使用集合中的计数器。

char_d = Counter(stri)

您的词典不包含空白字符的原因是因为您使用了 .split() 方法。

lst=stri.split()

因为括号之间没有参数,split()方法使用默认的(空白字符)将字符串分割成一个有序的序列,returns作为一个列表对象

['what', 'can', 'I', 'do']

您可以将任何字符串(或计算结果为字符串的对象)传递给方法,a la:

lst=stri.split('a')

这会将 stri 拆分为字符 'a',生成:

['wh', 't c', 'n I do']

在每种情况下,split 方法使用的分隔符都会在此过程中丢失。