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

Nop*_*ope 33 python dictionary alphabet

我想生成一个字母表中的字母作为键,类似于

letter_count = {'a': 0, 'b': 0, 'c': 0}
Run Code Online (Sandbox Code Playgroud)

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

谢谢你的帮助.

编辑
感谢大家的解决方案:)

nosklo的 解决方案可能是最短的

另外,感谢您提醒我有关Python 字符串模块的信息.

nos*_*klo 55

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

import string
d = dict.fromkeys(string.ascii_lowercase, 0)
Run Code Online (Sandbox Code Playgroud)

  • @ d.putto因为dicts没有任何订单,所以你获得密钥的顺序不是你可以依赖的.这与dicts一样正常. (4认同)
  • dict.fromkeys() 非常有用,您只需要注意使用可变对象(例如列表)作为值将在所有字典值中存储对该对象的*引用*。 (2认同)
  • @devtye `{ch: n for n, ch in enumerate(string.ascii_lowercase)}` (2认同)
  • 如果您不想记住库名称,也不希望使用显式导入语句,有更好的方法: ```d = {chr(x): 0 for x in range(ord('a' ), ord('z')+1)}``` (2认同)

小智 11

import string
letter_count = dict(zip(string.ascii_lowercase, [0]*26))
Run Code Online (Sandbox Code Playgroud)

或者可能:

import string
import itertools
letter_count = dict(zip(string.lowercase, itertools.repeat(0)))
Run Code Online (Sandbox Code Playgroud)

甚至:

import string
letter_count = dict.fromkeys(string.ascii_lowercase, 0)
Run Code Online (Sandbox Code Playgroud)

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


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

使用Countercollections模块:

>>> 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})
Run Code Online (Sandbox Code Playgroud)


小智 10

通过字典理解这很容易:

# Generate lowercase Mapping
{chr(i+96):i for i in range(1,27)}
# Generates :
# {'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}

# Generate UPPERCASE Mapping
{chr(i+64):i for i in range(1,27)}
# Generates :
# {'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5, 'F': 6, 'G': 7, 'H': 8, 'I': 9, 'J': 10, 'K': 11, 'L': 12, 'M': 13, 'N': 14, 'O': 15, 'P': 16, 'Q': 17, 'R': 18, 'S': 19, 'T': 20, 'U': 21, 'V': 22, 'W': 23, 'X': 24, 'Y': 25, 'Z': 26}
Run Code Online (Sandbox Code Playgroud)


Fed*_*oni 8

这是一个紧凑的版本,使用列表理解:

>>> 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}
Run Code Online (Sandbox Code Playgroud)


Kam*_*iel 8

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

import collections
d = collections.defaultdict(int)
Run Code Online (Sandbox Code Playgroud)


Jef*_*uer 5

又一个1线程的Python黑客攻击:

letter_count = dict([(chr(i),0) for i in range(97,123)])
Run Code Online (Sandbox Code Playgroud)

  • 绝对是一个黑客。至少,使用 range(ord('a'), ord('z')+1)。这至少描述了读者的意图。 (2认同)
  • 哦,给我休息.它被描述为*1-liner hack. (2认同)