Est-il un moyen rapide de générer un dict de l'alphabet en Python?

je veux générer un dict avec les lettres de l'alphabet comme touches, quelque chose comme

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

quelle serait une façon rapide de générer ce dict, plutôt que d'avoir à le taper?

Merci pour votre aide.

MODIFIER

Merci à tous pour vos solutions :)

nosklo solution est probablement le plus court

aussi, merci de me rappeler le module Python string .

28
demandé sur Community 2009-01-17 19:51:34

9 réponses

je trouve cette solution plus élégante:

import string
d = dict.fromkeys(string.ascii_lowercase, 0)
49
répondu nosklo 2009-01-17 18:36:15
import string
letter_count = dict(zip(string.ascii_lowercase, [0]*26))

ou peut-être:

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

ou même:

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

la solution préférée pourrait être une autre, en fonction des valeurs réelles que vous voulez dans le dict.


je vais faire une supposition ici: voulez-vous compter les occurences de lettres dans un texte (ou quelque chose de similaire)? Il y a une meilleure façon de le faire que de commencer avec un initialisé dictionnaire.

Utilisez Counter du module 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})
11
répondu 2016-09-20 16:50:25

Si vous prévoyez de l'utiliser pour compter, je suggère ce qui suit:

import collections
d = collections.defaultdict(int)
8
répondu Kamil Kisiel 2009-01-17 18:19:27

Voici une version compacte, en utilisant un liste de compréhension :

>>> 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}
8
répondu Federico A. Ramponi 2009-01-17 18:37:57

encore un autre hack 1-liner Python:

letter_count = dict([(chr(i),0) for i in range(97,123)])
5
répondu Jeff Bauer 2009-01-17 18:17:54

il y a ça aussi:

import string
letter_count = dict((letter, 0) for letter in string.ascii_lowercase)
3
répondu recursive 2009-01-18 23:44:10
import string
letters = string.ascii_lowercase
d = dict(zip(letters, [0]*len(letters))
2
répondu jfs 2009-01-17 17:05:46

un dictionnaire avec les lettres de l'alphabet comme clés et la valeur est la même que la clé:

d = {'z: 'z', 'p': 'p', 'a': 'a', 'c': 'c', 'o': 'o', 'g': 'g', 'd': 'j', 'k': 'k', 'f': 'f', 'v': 'v', 'm': 'm', 'x': 'x', 'q': 'q', 'y': 'y', 'r': 'r', 'h': 'h', 'n': 'n', 'l': 'l', 'j': 'j', 'u': 'u', 'i': 'i', '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
0
répondu Diego Orellana 2017-10-22 03:21:45

très facile avec le dictionnaire des compréhensions : {chr(i+96):i for i in range(1,27)} génère:

{'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}

vous pouvez générer la même chose pour le Capital A-Z avec chr(i+64)

0
répondu user10084443 2018-07-22 15:19:40