Rizando más el rizo, puede que queramos guardar en una variable varias cosas, como por ejemplo una lista de la compra. ¿Cómo hacer listas en Python?
Hay varios tipos de listas en Python, aunque sólo vamos a ver dos: listas y diccionarios.
Listas en Python
Son listados de datos en los que hay un orden, por lo que tiene en cuenta la posición en la que está el elemento. Recuerda que el primer elemento es el número 0, y no el número 1. En las listas se pueden modificar sus elementos, y puede haber elementos duplicados. Se crean poniendo sus elementos entre corchetes [a,b,c, >>>].
>>> # Ejemplo de una lista. Pilotos oficiales de Ferrari en 2014.
>>> Ferrari2014=["Fernando Alonso", "Kimi Raikkonen"]
>>> print (Ferrari2014)
['Fernando Alonso', 'Kimi Raikkonen']
>>> # Ejemplo de otra lista. Pilotos oficiales de Ferrari en 2013.
>>> Ferrari2013=["Fernando Alonso", "Felipe Massa"]
>>> print (Ferrari2013)
['Fernando Alonso', 'Felipe Massa']
Las listas tienen una flexibilidad total en los elementos que pueden tener, por lo que pueden contener no sólo texto, si no también números o cualquier otro tipo de variables.
Operaciones más habituales con listas en Python
Las operaciones más habituales que se realizan en Python son las siguientes:
- lista[i]: Devuelve el elemento que está en la posición i de la lista.
- lista.pop(i): Devuelve el elemento en la posición i de una lista y luego lo borra.
- lista.append(elemento): Añade elemento al final de la lista.
- lista.insert(i, elemento): Inserta elemento en la posición i.
- lista.extend(lista2): Fusiona lista con lista2.
- lista.remove(elemento): Elimina la primera vez que aparece elemento.
Si representamos todo esto en un ejemplo:
>>> # Acceder a un elemento de la lista.
>>> print(Ferrari2014[1])
Kimi Raikkonen
>>> # pop: Extraemos a Kimi (que está en la posición número 1) de la lista. Alonso está en la posición 0.
>>> Ferrari2014.pop(1)
>>> print(Ferrari2014)
['Fernando Alonso']
>>> # append: Añadimos a Kimi al final de la lista
>>> Ferrari2014.append("Kimi Raikkonen")
>>> print (Ferrari2014)
['Fernando Alonso', 'Kimi Raikkonen']
>>> # del:Eliminamos el elemento de la primera posición de la lista (Fernando)
>>> del(Ferrari2014[0])
>>> # insert: Añadimos a Fernando en la primera posición
>>> Ferrari2014.insert(0, "Fernando Alonso")
>>> print (Ferrari2014)
['Fernando Alonso', 'Kimi Raikkonen']
>>> # extend: Juntamos los pilotos del 2013 y los del 2014. Fernando estará repetido.
>>> Ferrari2014.extend(Ferrari2013)
>>> print (Ferrari2014)
['Fernando Alonso', 'Kimi Raikkonen', 'Fernando Alonso', 'Felipe Massa']
>>> #remove: Borramos la primera vez que aparece Fernando Alonso
>>> Ferrari2014.remove("Fernando Alonso")
>>> print (Ferrari2014)
['Kimi Raikkonen', 'Fernando Alonso', 'Felipe Massa']
Nota: Otra lista bastante usada son las tuplas (tuple en inglés), que son listas que no pueden ser modificadas. No obstante, no nos hace falta para lo que vamos a hacer.
Diccionarios en Python
Como sucede con un diccionario convencional, un diccionario en Python es una palabra que tiene asociado algo. Al contrario de lo que sucedía en las listas, los diccionarios tradicionalmente no tenían orden.
A partir de la versión 3.7 de python, esto cambió, y los diccionarios guardan el orden en el que se insertaron los elementos.
Se crean poniendo sus elementos entre llaves {«a»:»Alicante», «b»:»Barcelona»,>>>}. Se denominan keys a las «palabras» y values a las «definiciones». Lógicamente, no puede haber dos keys iguales, aunque sí dos values iguales.
>>> diccionario = {'Piloto 1':'Fernando Alonso', 'Piloto 2':'Kimi Raikkonen', 'Piloto 3':'Felipe Massa'}
>>> print(diccionario)
{'Piloto 1': 'Fernando Alonso', 'Piloto 3': 'Felipe Massa', 'Piloto 2': 'Kimi Raikkonen'}
Nota: Recuerda que tiene en cuenta las mayúsculas y las minúsculas.
Operaciones más habituales con diccionarios en Python
Es similar a las listas, con el matiz de que dado que los diccionarios no tienen orden, no tienen funciones en las que se tenga en cuenta la posición.
- diccionario.get(‘key’): Devuelve el valor que corresponde con la key introducida.
- diccionario.pop(‘key’): Devuelve el valor que corresponde con la key introducida, y luego borra la key y el valor.
- diccionario.update({‘key’:’valor’}): Inserta una determinada key o actualiza su valor si ya existiera.
- «key» in diccionario: Devuelve verdadero (True) o falso (False) si la key (no los valores) existe en el diccionario.
- «definicion» in diccionario.values(): Devuelve verdadero (True) o falso (False) si definición existe en el diccionario (no como key).
Poniendo todo esto en un ejemplo:
>>> # get(): Devuelve el valor que corresponde con la key introducida.
>>> print(diccionario.get('Piloto 1'))
Fernando Alonso
>>> # pop(): Devuelve el valor que corresponde con la key introducida, y luego borra la key y el valor.
>>> print(diccionario.pop('Piloto 1'))
Fernando Alonso
>>> print(diccionario)
{'Piloto 3': 'Felipe Massa', 'Piloto 2': 'Kimi Raikkonen'}
>>> # update(): Actualiza el valor de una determinada key o lo crea si no existe.
>>> diccionario.update({'Piloto 4':'Lewis Hamilton'})
>>> diccionario.update({'Piloto 2':'Sebastian Vettel'})
>>> print(diccionario)
{'Piloto 4': 'Lewis Hamilton', 'Piloto 2': 'Sebastian Vettel', 'Piloto 3': 'Felipe Massa'}
>>> # "key" in diccionario: devuelve verdadero (True) o falso (False) si la key existe en el diccionario.
>>> print ("Piloto 1" in diccionario)
True
>>> print ("piloto 1" in diccionario)
False
>>> print ("Sebastian Vettel" in diccionario)
False
>>> # "definición" in diccionario.values(): devuelve verdadero (True) o falso (False) si la definición existe en el diccionario.
>>> print ("Sebastian Vettel" in diccionario.values())
True
>>> # del diccionario['key']: Elimina el valor (y el key) asociado a la key indicada.
>>> del diccionario['Piloto 2']
>>> print(diccionario)
{'Piloto 4': 'Lewis Hamilton', 'Piloto 3': 'Felipe Massa'}
Conjuntos
Aunque se usan con menos frecuencia, python también dispone de conjuntos (sets).
Una característica importante de los conjuntos, es que no admiten elementos duplicados.
Aunque pueda parecer un problema, puede ser muy útil, ya que permite usarlo como truco para eliminar duplicados de una lista:
>>> lista = ['Fernando', 'Fernando', 'Felipe']
>>> print(lista)
['Fernando', 'Fernando', 'Felipe']
>>> lista = list(set(lista))
>>> print(lista)
['Fernando', 'Felipe']
Como los diccionarios, se crean usando llaves, pero entre las llaves sólo se escriben los elementos separados por coma como si se tratara de una lista (en vez de palabra: definición como se hace en los diccionarios).
>>> conjunto = {'Fernando Alonso', 'Kimi Raikkonen', 'Felipe Massa'}
>>> print(conjunto)
{'Fernando Alonso', 'Kimi Raikkonen', 'Felipe Massa'}
Los sets permiten realizar las operaciones matemáticas típicas de conjuntos como unión, intersección, etc.
Operaciones más habituales en conjuntos
- A | B: Unión entre el conjunto A y B (Los elementos del conjunta A y los elementos del conjunto B)
- A & B: Intersección entre el conjunto A y B (los elementos que están en ambos conjuntos)
- A – B: Diferencia entre el conjunto A y B (los elementos que están en A pero no están en B)
- A ^B: Diferencia simétrica entre el conjunto A y B (los elementos que están en A o en B pero no en los dos)
Zhisi dice
Hola, creo que hay una errata en la tercera línea de código del apartado «Diccionarios en Python». Pone:
«>>> diccionario={‘Piloto 1’:»Fernando Alonso», ‘Piloto 2′:’Kimi Raikkonen’, ‘Piloto 3′:’Felipe Massa’}
>>> print diccionario
{‘Piloto 1’: ‘Fernando Alonso’, ‘Piloto 2’: ‘Kimi Raikkonen’}
En la tercera línea debería poner:
«{‘Piloto 1’: ‘Fernando Alonso’, ‘Piloto 2’: ‘Kimi Raikkonen’, Piloto 3′:’Felipe Massa’}»
PD: Gracias por los tutoriales, son muy útiles.
jaime dice
Muchas gracias Zhisi.
Ya lo he corregido.
Como detalle, recuerda que como los diccionarios no tienen orden, python los imprime en el orden que considera.
Me alegro de que sean útiles.
Un saludo
Jaime
Juan dice
Está corregido? o aún no, porque lo veo igual.
jaime dice
Hola Juan,
en el apartado Diccionarios en Python yo lo veo corregido. ¿En qué apartado lo ves mal?
lara dice
si quisiera que me devuelva una secuancia desordenada con tuplas de dos elementos (la clave con su valor), como deberia hacer?
jaime dice
Hola Lara,
Entiendo que tu secuencia es similar a esta:
>>> lista = [(‘e1’, ‘e2’),(‘e3’, ‘e4’),(‘e5’, ‘e6’),]
personalmente lo haría con la biblioteca random (está en la biblioteca estándar):
>>> import random
>>> random.shuffle(lista)
>>> print(lista)
[(‘e1’, ‘e2’), (‘e5’, ‘e6’), (‘e3’, ‘e4’)]
Manuel dice
Tengo q instalar Python en mi Mac Book
jaime dice
Hola Manuel,
hay disponible versiones tanto de Anaconda como de python para Mac. Sólo tienes que descargarla e instalarla.
giordano_bruno dice
Hola ¿Hay forma de introducir una “Key” a un diccionario ya hecho?
jaime dice
Hola Giordano,
muchas gracias por el comentario. Puedes hacerlo usando el comando update:
diccionario.update({‘Piloto 4′:’Lewis Hamilton’})
Lo que pongas dentro de los paréntesis, tiene que ser otro diccionario.
Otra opción es asignar el valor directamente:
diccionario[‘Piloto 5′]=’Sebastian Vettel’
Voy a actualizar el artículo para incluirlo.
claudia dice
como convierto un diccionario en un listado
jaime dice
Hola Claudia,
depende de lo que quieras hacer. Supuesto que tengas una variable llamada diccionario:
1.- Si quieres hacerlo con las palabras:
list(diccionario.keys())
2.- Si quieres hacerlo con las definiciones:
list(diccionario.values())
3.- Si quieres usar las palabras y las definiciones:
list(diccionario.items())
Leidy dice
Hola, como puedo convertir una lista en un diccionario
jaime dice
Hola Leidy,
ten en cuenta que un diccionario está formado por dos partes: la palabra y la definición.
Si tienes una lista de parejas, puedes usar el comando dict:
>>> a = [['palabra1', 'definicion1'], ['palabra2', 'definicion2']]
>>> b = dict(a)
Daniel dice
Saludos como puedo capturar datos en un diccionario? digamos le tengo que pedir al usuario los dos valores ejemplo el nombre de la persona y peso
jaime dice
Hola Daniel,
puedes hacerlo así:
persona = "Pedro Picapiedra"
peso = 60
datos = {'Nombre':persona, 'Peso':peso}
Marta dice
¿Se puede crear un diccionario y que cada key tenga más de un valor asociado?
jaime dice
Hola Marta,
en un diccionario se puede hacer que cada key tenga dentro cualquier tipo de variable, ya sea un número, texto, una lista, otro diccionario, etc.
Jenny dice
como se hace que para que dentro de una key haya una lista? y cómo después le agrego a esa lista más características?
jaime dice
Hola Jenny,
perdona el retraso en responder. Realmente se hace igual que con otro tipo de variable. Tienes que intentar abstraerte y no fijarte en que es una lista:
>>> diccionario = {'Pilotos Ferrari':['Fernando Alonso', 'Felipe Massa']}
Agregar es exactamente igual:
>>>> diccionario.update({'Pilotos Mercedes':['Hamilton', 'Bottas']})
Alexandra dice
Hola, no soy nueva en mundo de la programación, pero si en python, las listas yo las conozco como Arrays, eso si no reconozco lo que son las tuplas, suenan interesante…. A en cuanto los diccionarios me parecen similares a los documentos JSON, aunque no conozco a profundidad sobre el tema, me suena muy interesantes los métodos/funciones que posee.
Luis Enrique dice
Cual es optimo utilizar para las listas Paréntesis ( o [ Corchete
jaime dice
Hola Luis Enrique,
Para hacer una lista tienes que usar corchetes. Si usas paréntesis estarás definiendo una tupla.
Ina dice
Hola Jaime,
Tengo un diccionario con una serie de claves y sus vales correspondientes.
Algo asi:
abhor -3
abhorred -3
abhorrent -3
abhors -3
abilities 2
Y después tengo un documento .txt con un texto.
Lo que tengo que hacer es ligar el texto con el diccionario y hacer que para cada frase, las frases están definidas por [ ], me de la suma de sus palabras (los valores de las palabras de cada frase vienen dadas en el diccionario).
Si me pudieras echar una mano te lo agradecería mucho.
Un saludo
jaime dice
Hola Ina,
lo primero que tendrías que hacer es convertir el texto en una lista. Habría que ver el archivo de texto para ver cómo hacerlo ¿está cada frase en una nueva línea?
Luego tendrías que buscar para cada frase el valor de cada palabra:
valor = 0
for palabra in frase.split():
valor += diccio.get(palabra,0)
Josue dice
Hola!
Quisiera hacer un programa que me diga cuántas estampas me faltan en mi colección, si le doy un input con «estampa1», «estampa6» «estampa45», «estampa31».
Las estampas totales son 50 por ejemplo.
jaime dice
Hola Josue,
¿no será un ejercicio que te han puesto en clase?.
La manera más sencilla de hacerlo es unsando los conjuntos (sets). En tu caso:
>>> a = {"estampa1", "estampa6", "estampa31", "estampa45"}
>>> b = {"estampa"+str(x+1) for x in range (50)}
>>> print(b-a)
Josue dice
No puede ser jajaja
Ya lo termine, y lo hice super grande y con listas. 🙁
Pero funciona que es lo que importa en la calificación de ese ejercicio.
Muchas gracias!
Vere si implemento ese código, es más corto. 🙂
Felicitaciones por tus grandes aportes.
jaime dice
Hola Josue,
pensaba que el ejercicio te lo ponían para usar conjuntos.
Con listas también se puede hacer de forma similar:
>>> a = ["estampa1", "estampa6", "estampa31", "estampa45"]
>>> b = ['estampa'+str(x+1) for x in range(50) if 'estampa'+str(x+1) not in a]
>>> print(b)
xoan dice
Hola.
Hay alguna forma de acceder a una key a traves de su valor?
gracias.
jaime dice
Hola Xoan,
puedes hacerlo iterando con el diccionario, o creando un diccionario «inverso»:
dicinverso = {definicion: palabra for palabra, definicion in diccionario.items()}
anónimous dice
Cuando hago lo del conjunto, cambia el orden de las palabras y las pone de diferente modo, se puede cambiar?
jaime dice
Hola Anónimous,
los conjuntos son también estructuras sin orden.
ayase_yukino dice
alguien me puede ayudar a hacer el siguente programa hacer un programa en python para generar los correos electrónicos para que genere
además una contraseña provisional el formato de la contraseña provisional es:
la inicial de cada nombre y apellido del usuario en mayúsculas y los últimos
cuatro dígitos de su matricula.
Giselle Lorena Flórez dice
Buenas Noches,
Si tengo un diccionario y quiero saber cuál es el valor mínimo entre todos los valores, ¿Qué puedo hacer?
jaime dice
Hola Giselle,
me suena mucho a un ejercicio de clase. ¿Para que necesitas saber el valor mínimo?
Sara dice
hola! tengo que acceder al valor de una llave que esta en diferentes diccionarios que conforman una lista ej: [{llave: valor, otra_llave: valor}, {llave: valor, otra_llave: valor},{llave: valor, otra_llave: valor}] como podría acceder a un valor?
jaime dice
Hola Sara,
tienes que acceder al elemento de la lista y luego hacer la petición como en un diccionario normal:
lista[0].get(llave)
Jesús dice
Hola, ¿cómo puedo imprimir elementos de una lista los cuales son diccionarios?
jaime dice
Hola Jesús,
parece un ejercicio de clase… ¿Para qué quieres imprimir esa lista? ¿Qué hay en los diccionarios?
Aitana dice
Hola buenas, como puedo acceder a un valor que esta en una lista y a su vez en un diccionario? Por ejemplo:
d = {a:[lunes, martes], b: [lunes, miercores], c:[jueves, sabado]
quiero acceder a:
martes, miercoles, sabado –> segundo elemento de la lista
Como se haria?
jaime dice
Hola Aitana,
puedes hacer d.get(‘a’)[1] o d[‘a’][1]
Primeros obtienes la lista de la «definición» del diccionario y luego el elemento en el que estés interesado.
Recuerda que a, b y c tienes que ponerlos entre comillas.
Aitana dice
Buenas, para ordenar un diccionario por valor y este valor esta dentro de una lista como se haria o no se puede?
Tengo este diccionario:
d = {«mascarillas»: [1, 45645, 4564], «peines»: [468,2879,789]}
y quiero ordenar por el 3 elemento de la lista, ¿como se haría?
Gracias
jaime dice
Hola Aitana,
aunque a partir de la versión 3.6 python guarda el orden de inserción, como norma general, los diccionarios en python no tienen orden.
Si simplemente quisieras imprimirlos por orden, podrías hacerlo así:
sorted(d.items(), key=lambda x: x[1][2])
Daniel dice
Se puede hacer una lista infinita. en la que tu le pueda colocar cualquier cantidad de objetos usando la función while.
ISELLA ALVAREZ dice
Como hago para generar un registro de estados de vehículos , ya sea QUE LISTO, OPERANTE y DEVUELTO A LA EMPRESA, ose que se puedan modificar, dentria que crear una lista diccionario tupla??
jaime dice
Hola Isella,
personalmente lo haría con un diccionario.
Si usas una tupla, ten en cuenta que no podrás hacer modificaciones en ella.
Paulo dice
Prepare un script en Python que permita ingresar nombres y edades de los alumnos de un curso en la estructura de datos diccionario, la cantidad a ingresar se desconoce. Utilice para esto el ciclo while. Para cada ingreso se dirá por pantalla si el alumno es mayor de edad o no. Al terminar mostrará la cantidad de alumnos ingresadas y el nombre y la edad del alumno de menor edad.
No se como estructurarlo
jaime dice
Hola Paulo,
mi recomendación es que intentes ir haciendo las cosas básicas que hace el programa (por ejemplo pedir nombre y edad) y que luego intentes montar las diferentes partes juntas.
Para aprender a programar tienes que enfrentarte al problema y pensar en cómo solucionarlo.
Nacho dice
¿Cómo puedo modificar una clave en un diccionario manteniendo el valor y luego eliminar dicha clave?
jaime dice
Hola Nacho,
está explicando en el propio artículo. Podrías hacerlo con diccionario.update() y diccionario.pop()