如何从字符串形成字典?

Ala*_*anH 1 python dictionary for-loop

word = 'stacks' 
word_dict = {} # to form new dictionary formed from
for letter in word:
    word_dict[letter] += 1
print word_dict
Run Code Online (Sandbox Code Playgroud)

我想从字符串创建一个新字典,跟踪字母的数量word.所以我想要得到的是:

> word_dict = {'s':2, 't':1, 'a':1, 'c':1, 'k':1}
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何做到这一点.我得到KeyError了我目前的代码

Mar*_*ers 8

改为使用collections.Counter()该类:

from collections import Counter

word_dict = Counter(word)
Run Code Online (Sandbox Code Playgroud)

在Counter做同样的事情; 计算每个字母的出现次数word.

在您的特定情况下,您没有先检查密钥是否已存在,或者如果不存在则提供默认密钥.你可以dict.get()这样做:

word = 'stacks' 
word_dict = {} # to form new dictionary formed from
for letter in word:
    word_dict[letter] = word_dict.get(letter, 0) + 1
print word_dict
Run Code Online (Sandbox Code Playgroud)

或者dict.setdefault()单独使用以在递增之前显式设置默认值:

word = 'stacks' 
word_dict = {} # to form new dictionary formed from
for letter in word:
    word_dict.setdefault(letter, 0)
    word_dict[letter] += 1
print word_dict
Run Code Online (Sandbox Code Playgroud)

或者自己测试一下密钥:

word = 'stacks' 
word_dict = {} # to form new dictionary formed from
for letter in word:
    if letter not in word_dict:
        word_dict[letter] = 0
    word_dict[letter] += 1
print word_dict
Run Code Online (Sandbox Code Playgroud)

按效率降序排列.

或者您可以使用collections.defaultdict()对象自动插入0如果键尚不存在的情况:

from collections import defaultdict

word_dict = defaultdict(int)
for letter in word:
    word_dict[letter] += 1
print word_dict
Run Code Online (Sandbox Code Playgroud)

这基本上是Counter类所做的,但类型增加了一些其他细节,例如列出最常用的键或组合计数器.

演示:

>>> from collections import defaultdict, Counter
>>> word = 'stacks' 
>>> word_dict = {} # to form new dictionary formed from
>>> for letter in word:
...     word_dict[letter] = word_dict.get(letter, 0) + 1
... 
>>> word_dict
{'a': 1, 'c': 1, 's': 2, 't': 1, 'k': 1}
>>> word_dict = defaultdict(int)
>>> for letter in word:
...     word_dict[letter] += 1
... 
>>> word_dict
defaultdict(<type 'int'>, {'a': 1, 'c': 1, 's': 2, 't': 1, 'k': 1})
>>> Counter(word)
Counter({'s': 2, 'a': 1, 'c': 1, 't': 1, 'k': 1})
Run Code Online (Sandbox Code Playgroud)