有没有快速的方法在Python中生成字母表的字典?

时间:2009-01-17 16:51:35

标签: python dictionary alphabet

我想用字母表中的字母作为键生成一个字典,比如

letter_count = {'a': 0, 'b': 0, 'c': 0}

什么是生成该字典的快速方法,而不是我必须输入?

感谢您的帮助。

修改
感谢大家的解决方案:)

nosklo's solution可能是最短的

另外,感谢您提醒我Python string模块。

13 个答案:

答案 0 :(得分:54)

我发现这个解决方案更优雅:

import string
d = dict.fromkeys(string.ascii_lowercase, 0)

答案 1 :(得分:11)

import string
letter_count = dict(zip(string.ascii_lowercase, [0]*26))

或者也许:

import string
import itertools
letter_count = dict(zip(string.lowercase, itertools.repeat(0)))

甚至:

import string
letter_count = dict.fromkeys(string.ascii_lowercase, 0)

首选解决方案可能不同,具体取决于您在dict中所需的实际值。


我会在这里猜一下:你想计算文本中出现的字母(或类似的东西)吗?除了从初始化的字典开始,还有一种更好的方法。

使用Counter模块中的collections

>>> import collections
>>> the_text = 'the quick brown fox jumps over the lazy dog'
>>> letter_counts = collections.Counter(the_text)
>>> letter_counts
Counter({' ': 8, 'o': 4, 'e': 3, ... 'n': 1, 'x': 1, 'k': 1, 'b': 1})

答案 2 :(得分:8)

这是一个紧凑版本,使用list comprehension

>>> import string
>>> letter_count = dict( (key, 0) for key in string.ascii_lowercase )
>>> letter_count
{'a': 0, 'c': 0, 'b': 0, 'e': 0, 'd': 0, 'g': 0, 'f': 0, 'i': 0, 'h': 0, 'k': 0,
 'j': 0, 'm': 0, 'l': 0, 'o': 0, 'n': 0, 'q': 0, 'p': 0, 's': 0, 'r': 0, 'u': 0, 
't': 0, 'w': 0, 'v': 0, 'y': 0, 'x': 0, 'z': 0}

答案 3 :(得分:8)

如果您打算使用它进行计数,我建议如下:

import collections
d = collections.defaultdict(int)

答案 4 :(得分:5)

另一个单行Python骇客:

letter_count = dict([(chr(i),0) for i in range(97,123)])

答案 5 :(得分:3)

也是这样:

import string
letter_count = dict((letter, 0) for letter in string.ascii_lowercase)

答案 6 :(得分:2)

import string
letters = string.ascii_lowercase
d = dict(zip(letters, [0]*len(letters))

答案 7 :(得分:1)

通过字典理解非常容易:{chr(i+96):i for i in range(1,27)} 生成:

{'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4, 'g': 7, 'f': 6, 'i': 9, 'h': 8, 'k': 11, 'j': 10, 'm': 13, 'l': 12, 'o': 15, 'n': 14, 'q': 17, 'p': 16, 's': 19, 'r': 18, 'u': 21, 't': 20, 'w': 23, 'v': 22, 'y': 25, 'x': 24, 'z': 26}

您可以使用chr(i+64)

为大写字母A-Z生成相同的内容

答案 8 :(得分:1)

import string
s =string.ascii_lowercase 
s1 =string.ascii_uppercase
s2=string.ascii_letters
print(dict(enumerate(s,1))) 
print(dict(enumerate(s1,1)))
print(dict(enumerate(s2,1)))

答案 9 :(得分:0)

将字母表中的字母作为键的字典,其值与键相同:

  

d = {'z':'z','p':'p','a':'a','c':'c','o':'o','g': 'g','d':'d','k':'k','f':'f','v':'v','m':'m','x':'x ','q':'q','y':'y','r':'r','h':'h','n':'n','l':'l', 'j':'j','你':'你','我':'我','b':'b','s':'s','w':'w','e ':'e','t':'t'}

d = dict.fromkeys(string.ascii_lowercase, 0)
count=97
for i in range(26):    
    d[chr(count)]=chr(count)    
    count=count+1

答案 10 :(得分:0)

您可以直接使用字典和范围,因此您可以创建自己的函数并轻松对其进行自定义。

def gen_alphabet(start, value):
    return {chr(ord('a') + i) : 0 for i in range(value)}

print(gen_alphabet('a', 26))

输出:

>>> {'a': 0, 'c': 0, 'b': 0, 'e': 0, 'd': 0, 'g': 0, 'f': 0, 'i': 0, 'h': 0, 'k': 0, 'j': 0, 'm': 0, 'l': 0, 'o': 0, 'n': 0, 'q': 0, 'p': 0, 's': 0, 'r': 0, 'u': 0, 't': 0, 'w': 0, 'v': 0, 'y': 0, 'x': 0, 'z': 0}

答案 11 :(得分:0)

我的变体:

注意:Unicode范围A-Z => 65-90(十进制)

d = dict.fromkeys([chr(j) for j in range(65, 90)], 0)
print(d)

输出:

>>> {'A': 0, 'B': 0, 'C': 0, 'D': 0, 'E': 0, 'F': 0, 'G': 0, 'H': 0, 'I': 0, 'J': 0, 'K': 0, 'L': 0, 'M': 0, 'N': 0, 'O': 0, 'P': 0, 'Q': 0, 'R': 0, 'S': 0, 'T': 0, 'U': 0, 'V': 0, 'W': 0, 'X': 0, 'Y': 0}

答案 12 :(得分:0)

a_to_z = [(chr(i+64), chr(i+64)) for i in range(1, 27)]

输出

[('A', 'A'), ('B', 'B'), ('C', 'C'), ('D', 'D'), ('E', 'E'), ('F', 'F'), ('G', 'G'), ('H', 'H'), ('I', 'I'), ('J', 'J'), ('K', 'K'), ('L', 'L'), ('M', 'M'), ('N', 'N'), ('O', 'O'), ('P', 'P'), ('Q', 'Q'), ('R', 'R'), ('S', 'S'), ('T', 'T'), ('U', 'U'), ('V', 'V'), ('W', 'W'), ('X', 'X'), ('Y', 'Y'), ('Z', 'Z')]