resueltos - lista dentro de un diccionario python
¿Existe alguna forma rápida de generar un dict del alfabeto en Python? (8)
import string
letters = string.ascii_lowercase
d = dict(zip(letters, [0]*len(letters))
Quiero generar un dic con las letras del alfabeto como las teclas, algo así como
letter_count = {''a'': 0, ''b'': 0, ''c'': 0}
¿Cuál sería una forma rápida de generar ese dict, en lugar de tener que escribirlo?
Gracias por tu ayuda.
EDITAR
Gracias a todos por sus soluciones :)
La solución de nosklo es probablemente la más corta
Además, gracias por recordarme sobre el módulo de cadena de Python.
Aquí hay una versión compacta, usando una lista de comprensión :
>>> 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}
Encuentro esta solución más elegante:
import string
d = dict.fromkeys(string.ascii_lowercase, 0)
Otro truco de Python 1-liner:
letter_count = dict([(chr(i),0) for i in range(97,123)])
Si planea usarlo para contar, le sugiero lo siguiente:
import collections
d = collections.defaultdict(int)
También hay esto:
import string
letter_count = dict((letter, 0) for letter in string.ascii_lowercase)
import string
letter_count = dict(zip(string.ascii_lowercase, [0]*26))
o tal vez:
import string
import itertools
letter_count = dict(zip(string.lowercase, itertools.repeat(0)))
o incluso:
import string
letter_count = dict.fromkeys(string.ascii_lowercase, 0)
La solución preferida puede ser diferente, dependiendo de los valores reales que desee en el dict.
Voy a adivinar aquí: ¿quieres contar las ocurrencias de letras en un texto (o algo similar)? Hay una forma mejor de hacer esto que comenzar con un diccionario inicializado.
Usar Counter
del módulo de 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})
Un diccionario con las letras del alfabeto como claves y el valor es el mismo que la clave:
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