web-dev-qa-db-fra.com

Existe-t-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}

quel serait un moyen rapide de générer ce dict, plutôt que moi d'avoir à le taper?

Merci de votre aide.

MODIFIER
Merci à tous pour vos solutions :)

nosklo'ssolution est probablement la plus courte

Merci également de m'avoir rappelé le module Python string .

30
Nope

Je trouve cette solution plus élégante:

import string
d = dict.fromkeys(string.ascii_lowercase, 0)
54
nosklo
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 peut être différente, en fonction des valeurs réelles que vous souhaitez dans le dict.


Je vais essayer de deviner: voulez-vous compter les occurrences de lettres dans un texte (ou quelque chose de similaire)? Pour ce faire, il est préférable de commencer par un dictionnaire initialisé.

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
user3850

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

import collections
d = collections.defaultdict(int)
8
Kamil Kisiel

Voici une version compacte utilisant une liste 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}
8
Federico A. Ramponi

Encore un autre hack en Python à une ligne:

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

Il y a aussi ceci:

import string
letter_count = dict((letter, 0) for letter in string.ascii_lowercase)
3
recursive
import string
letters = string.ascii_lowercase
d = dict(Zip(letters, [0]*len(letters))
2
jfs

très facile avec la compréhension du dictionnaire: {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 Capital A à Z avec chr(i+64)

1
user10084443

Un dictionnaire avec les lettres de l'alphabet sous forme de clés et la valeur est identique à la clé:

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', '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
Diego Orellana