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 .
Je trouve cette solution plus élégante:
import string
d = dict.fromkeys(string.ascii_lowercase, 0)
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})
Si vous envisagez de l'utiliser pour compter, je suggère ce qui suit:
import collections
d = collections.defaultdict(int)
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}
Encore un autre hack en Python à une ligne:
letter_count = dict([(chr(i),0) for i in range(97,123)])
Il y a aussi ceci:
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))
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)
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