Is there a fast way to generate a dict of the alphabet in Python?

你离开我真会死。 提交于 2019-12-02 16:14:10

I find this solution more elegant:

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

or maybe:

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

or even:

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

The preferred solution might be a different one, depending on the actual values you want in the dict.


I'll take a guess here: do you want to count occurences of letters in a text (or something similar)? There is a better way to do this than starting with an initialized dictionary.

Use Counter from the collections module:

>>> 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})

If you plan to use it for counting, I suggest the following:

import collections
d = collections.defaultdict(int)
Federico A. Ramponi

Here's a compact version, using a 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}

Yet another 1-liner Python hack:

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

There's this too:

import string
letter_count = dict((letter, 0) for letter in string.ascii_lowercase)
import string
letters = string.ascii_lowercase
d = dict(zip(letters, [0]*len(letters))
user10084443

very easy with dictionary comprehensions : {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}

You can generate the same for Capital A-Z with chr(i+64)

You can use dictionary and range directly, so you can create your own function and easily customize it.

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

print(gen_alphabet('a', 26))

OUTPUT:

>>> {'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}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!