Skip to main content
 首页 » 编程设计

python之如何从字符串形成字典

2025年05月04日24del

word = 'stacks'  
word_dict = {} # to form new dictionary formed from 
for letter in word: 
    word_dict[letter] += 1 
print word_dict 

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

> word_dict = {'s':2, 't':1, 'a':1, 'c':1, 'k':1} 

但我不知道该怎么做。我的当前代码得到 KeyError

请您参考如下方法:

使用 collections.Counter() class相反:

from collections import Counter 
 
word_dict = Counter(word) 

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

在您的特定情况下,您没有首先检查 key 是否已经存在,如果不存在则提供默认值。您可以使用 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 

或单独使用 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 

或自己测试 key :

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 

按效率降序排列。

或者您可以使用 collections.defaultdict() object如果 key 尚不存在,则自动插入 0:

from collections import defaultdict 
 
word_dict = defaultdict(int) 
for letter in word: 
    word_dict[letter] += 1 
print word_dict 

这基本上就是 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})