Introducción a Python

Vamos a hacer una pequeña introducción al lenguaje de programación Python. Para ello, me voy a apoyar principalmente en dos excelentes recursos para aprender Python online que siempre recomiendo:

¿Qué es esto?

Esto es un cuaderno de Jupyter compuesto de una serie de celdas de distintos tipos. Esta primera celda contiene texto formateado. Para ver el código (y editarlo, si es necesario), haz doble clic sobre ella y verás el código Markdown.

La siguiente celda, por el contrario, contiene código en Python. Para ejecutarla y ver cómo funciona, selecciónala y pulsa ctrl-ENTER:


In [1]:
print('Esto es un mensaje')


Esto es un mensaje

Variables y tipos de datos

En los lenguajes de programación, una variable es un tipo de identificador que almacena o al que se le asigna un determinado valor. Este valor puede ser de distinto tipo, como veremos más adelante. Para asignar valores a variables, utilizamos el signo = con la siguiente sintaxis:

nombre_de_variable = valor

Veamos un ejemplo: vamos a declarar distintas variables, asignándoles valores:


In [2]:
# NOTA: en Python, las líneas que comienzan con # son comentarios
# El intérprete no las lee. Los humanos sí deberíamos leerlas :-)
mivariable = 34
edad = 25
year = 1992

En Python podemos utilizar como nombre de variable cualquier secuencia de caracteres alfanuméricos, siempre que comience por una letra del alfabeto y no sea una palabra reservada por el propio lenguaje (típicamente, nombres de funciones y palabras clave).

Una vez que hemos asignado valores a nombres de variables, podemos utilizar o recuperar esos valores siempre que lo necesitemos.

Para hacer una pequeña prueba, vamos a imprimir por pantalla el valor de las variables declaradas anteriormente. Para imprimir por pantalla, usamos la función print.


In [3]:
print(mivariable)
print(year)
print('mivariable')
print('year')
print('El niño come manzanas.')
print(255666)


34
1992
mivariable
year
El niño come manzanas.
255666

In [4]:
# esta celda dará error, al menos mientras no declaremos la variable llamada otraVariable
print(otraVariable)


---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-4-b194cb63a1bb> in <module>()
      1 # esta celda dará error, al menos mientras no declaremos la variable llamada otraVariable
----> 2 print(otraVariable)

NameError: name 'otraVariable' is not defined

En el ejemplo anterior, hemos declarado tres variables diferentes. Sin embargo, el tipo de dato que estábamos almacenando era el mismo: simples números enteros.

Como hemos mencionado antes, las variables pueden almacenar distintos tipos de datos. Los principales que vamos a utilizar nosotros son:

  • números enteros: 1, 4542, -38
  • números reales: 2.3, -0.00000034123, 10.0
  • cadenas de texto: hola, La niña come manzanas, to/TO be/VB or/CC not/RB to/TO be/VB
  • valores booleanos: True, False

Veamos cómo funcionan.


In [5]:
# números enteros (integer)
hijos = 3

# números reales (float), siempre indicando los decimales con punto
precio = 350.25
longitud = 1.5

# cadenas de texto (string), siempre entre comillas simples o dobles
nombre = "Pedro"
apellidos = 'Sanz Hernández'

# valores booleanos (bool): solo pueden ser True o False, escritos tal cual sin comillas
animal = True
mineral = False

In [6]:
# imprimimos algunos de ellos por pantalla
print(hijos)
print("Me llamo", nombre, apellidos) # fíjate cómo puedo imprimir más de una cosa con la función print
print(precio)
print(mineral)


3
Me llamo Pedro Sanz Hernández
350.25
False

Los valores que contienen las variabes pueden ser reasignados en cualquier momento. Eso sí, solo almacenan el último valor que hayamos asignado.

Si reasignamos algunas de las variables declaradas anteriormente e imprimimos sus valores por pantalla, comprobamos que éstos han cambiado:


In [7]:
nombre = 'Ana'
apellidos = 'Serrano de la Oca'
print(nombre, apellidos)


Ana Serrano de la Oca

Operaciones aritméticas

Podemos utilizar el intérprete de Python como una calculadora. Basta con introducir operaciones aritméticas como operadores que seguramente ya conoces: suma (+), resta (-), multiplicación (*), división (/), potencias (**) y módulo (%). Vamos a imprimir por pantalla el resultado de algunas operaciones.


In [8]:
#suma 
print(5+6)

# resta
print(10-3)

# multiplicación
print(25*6)

# división
print(2558/800000)

# potencias
print(2**3)

# módulo hace referencia al resto de la división 10/2.
print(10%2)

print(6+5+12*2)

print((6+5+12)*2)

print(6+5+(12*2))


11
7
150
0.0031975
8
0
35
46
35

Si retomamos lo aprendido anteriormente acerca de las variables, veremos que podemos declarar variables a partir de operaciones matemáticas, por ejemplo:


In [9]:
# una suma sencilla
suma = 9+5
print(suma)


14

In [10]:
# calculamos el área de un cuadrado
lado = 1.5
area = lado**2 # es equivalente a lado*lado
print(area)


2.25

In [11]:
# vamos a calcular el precio final de un producto cuyo valor es 19,95€
iva = 21
precio = 19.95
precio_final = precio + (precio * iva)/100
print(precio_final)


24.139499999999998

In [12]:
# calculamos la edad actual de una persona
ahora = 2016
fechaNacimiento = 1985
edad = ahora - fechaNacimiento
print(edad)


31

Gestión de cadenas (strings)

Si nuestro objetivo es aprende a programar en Python para procesar texto, las cadenas de caracteres van a ser el principal tipo de dato que vamos a manejar. Como hemos visto antes, las cadenas se identifican en Python porque se declaran entre comillas dobles ("cadena") o simples ('cadena') o, si las cadenas son muy largas y ocupan más de una línea, entre triples pares de comillas.

Algunos ejemplos de cadenas:


In [13]:
nombre = "Godofredo de Orléans"

oracion = 'GREEN COLORLESS IDEAS SLEEP FURIOUSLY'

parrafo = '''En un lugar de la Mancha, de cuyo nombre no quiero acordarme, 
no ha mucho tiempo que vivía un "hidalgo" de los de lanza en astillero, 
adarga antigua, rocín flaco y galgo corredor. Una olla de algo más vaca 
que carnero, salpicón las más noches, duelos y quebrantos los sábados, 
lentejas los viernes, algún palomino de añadidura los domingos, consumían 
las tres partes de su hacienda.'''

¡OJO! Podemos definir como valores de variables cadenas formadas por secuencias de números, siempre que se declaren entre comillas. Es muy importante entender la diferencia entre:


In [14]:
numero1 = 45852236
numero2 = '45852236'

# podemos realizar operaciones aritméticas entre números
print(numero1 + 1)

# pero no entre cadenas y números: esto da un error
print(numero2 + 1)


45852237
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-14-5aa10caccdd5> in <module>()
      6 
      7 # pero no entre cadenas y números: esto da un error
----> 8 print(numero2 + 1)

TypeError: Can't convert 'int' object to str implicitly

In [15]:
# sin embargo, sí puedo utilizar el operador '+' para concatenar varias cadenas
print(numero2 + '1')
print('¡Hola' + ' ' + 'amigo!')

print("otra", "vez " * 3)
print("otra" + "vez" * 3)


458522361
¡Hola amigo!
otra vez vez vez 
otravezvezvez

Conversión ente cadenas y enteros

Otra manera de generar cadenas de texto es utilizando la función str() con un argumento que no sea una cadena. Fíjate en los ejemplos:


In [16]:
# guardamos en numero1 un entero
numero1 = 45852236
# en numero2, guardamos el valor de numero1 convertido a cadena de texto con la función str()
numero2 = str(numero1)

# con la función type() imprimimos por pantalla el tipo de dato que guarda una variable
print(type(numero1)) # es un entero: int
print(type(numero2)) # es una cadena: str


print("\nOtros tipos de datos son:")
print(type(2.3))
print(type(True))
print(type(""))


<class 'int'>
<class 'str'>

Otros tipos de datos son:
<class 'float'>
<class 'bool'>
<class 'str'>

Para hacer el paso contrario, es decir, transformar cadenas en enteros, podemos utilizar la función int().


In [17]:
# guardamos en numero1 una cadena
numero1 = '45852236'
# en numero2, guardamos el valor de numero1 convertido a entero con la función int()
numero2 = int(numero1)

# con la función type() imprimimos por pantalla el tipo de dato que guarda una variable

print(type(numero1)) # es una cadena: str
print(type(numero2)) # es un entero: int

# esto no va a funcionar :-/ no podemos convertir cadenas a enteros
otracosa = "hola amigo"
print(int(otracosa))


<class 'str'>
<class 'int'>
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-17-cb93dd8bf99d> in <module>()
     11 # esto no va a funcionar :-/ no podemos convertir cadenas a enteros
     12 otracosa = "hola amigo"
---> 13 print(int(otracosa))

ValueError: invalid literal for int() with base 10: 'hola amigo'

Recuerda, cualquier secuencia alfanumérica encerrada entre comillas será tratada como una cadena de caracteres (string) aunque esté formada únicamente por dígitos.

Métodos sobre cadenas

Existe una serie de funciones y metodos que podemos ejecutar sobre cadenas de texto y que nos van a permitir realizar operaciones y transformar dichas cadenas de distintas maneras, p. ej.:

  • contar el número de caracteres de una cadena (len())
  • transformar la cadena a mayúsculas (.upper()) o minúsculas (.lower())

Para más info, consulta los métodos que podemos aplicar a las cadenas.


In [18]:
print(len(nombre))
print(len(oracion))
print(len(parrafo))


20
37
387

In [19]:
print(len(nombre)) # devuelve la longitud (en número de caracteres) de una cadena

print(oracion.lower()) # transforma una cadena a minúsculas (lowercas)
print(oracion)

print(parrafo.upper()) # transforma una cadena a mayúsculas (uppercas)
print(parrafo) #

print('AbCdEfGhIjKlMnÑoPqRsTuVwXyZ'.swapcase()) # transforma mayúsculas a minúsculas y viceversa

# incluso funciona con las letras con diacríticos
print("áéíóúüûÁÉÍÓÚÛÜ".swapcase())


20
green colorless ideas sleep furiously
GREEN COLORLESS IDEAS SLEEP FURIOUSLY
EN UN LUGAR DE LA MANCHA, DE CUYO NOMBRE NO QUIERO ACORDARME, 
NO HA MUCHO TIEMPO QUE VIVÍA UN "HIDALGO" DE LOS DE LANZA EN ASTILLERO, 
ADARGA ANTIGUA, ROCÍN FLACO Y GALGO CORREDOR. UNA OLLA DE ALGO MÁS VACA 
QUE CARNERO, SALPICÓN LAS MÁS NOCHES, DUELOS Y QUEBRANTOS LOS SÁBADOS, 
LENTEJAS LOS VIERNES, ALGÚN PALOMINO DE AÑADIDURA LOS DOMINGOS, CONSUMÍAN 
LAS TRES PARTES DE SU HACIENDA.
En un lugar de la Mancha, de cuyo nombre no quiero acordarme, 
no ha mucho tiempo que vivía un "hidalgo" de los de lanza en astillero, 
adarga antigua, rocín flaco y galgo corredor. Una olla de algo más vaca 
que carnero, salpicón las más noches, duelos y quebrantos los sábados, 
lentejas los viernes, algún palomino de añadidura los domingos, consumían 
las tres partes de su hacienda.
aBcDeFgHiJkLmNñOpQrStUvWxYz
ÁÉÍÓÚÜÛáéíóúûü

Listas

Las listas de Python son una estructura de datos que almacenan una colección de diferentes tipos de información en forma de secuencia ordenada, bajo un solo nombre de variable. Las listas pueden guardar valores de cualquiera de los tipos que hemos visto anteriormente (cadenas, números y booleanos) e incluso las listas pueden incluir otras listas de manera anidada.

Las listas se declaran especificando la colección de elementos entre corchetes y separando los elementos con comas:


In [20]:
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
dias = ["lunes", "martes", "miércoles", "jueves", "viernes", "sábado", "domingo"]
misCosas = [23.4, True, oracion.lower(), len(nombre)]
listaVacia = []

# los imprimimos por pantalla
print(numeros)
print(dias)
print(misCosas)
print(listaVacia)

print(type(numeros))
print(len(numeros))
print(len(misCosas))


[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
['lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado', 'domingo']
[23.4, True, 'green colorless ideas sleep furiously', 20]
[]
<class 'list'>
10
4

Las listas son estructuras de datos ordenadas, lo que implica que podemos acceder a los elementos individuales a través de un índice (la posición que ocupa en la secuencia). El índice se especifica indicando el nombre de la lista y un entero entre corchetes: nombre_de_lista[índice].

¡OJO! Los índices de las listas comienzan con 0, no con 1: el primer elemento es nombre_de_lista[0].


In [21]:
print('el primer día de la semana es', dias[0])
print('el tercer día de la semana es ' + dias[2])
print('y el último es', dias[-1])

print('el tercer día de la semana es ' + dias[2] + ' y el sexto día es ' + dias[-2])
print('el tercer día de la semana es', dias[2], 'y el sexto día es', dias[-2])


# podemos utilizar los índices también para reasignar valores a los elementos de una lista
# p. ej., cambiamos el primer valor de la lista misCosas
misCosas[0] = 44
print(misCosas)

# ¡OJO! si intentamos acceder a un índice que no existe, el intérprete nos dará error
print(misCosas[8])


el primer día de la semana es lunes
el tercer día de la semana es miércoles
y el último es domingo
el tercer día de la semana es miércoles y el sexto día es sábado
el tercer día de la semana es miércoles y el sexto día es sábado
[44, True, 'green colorless ideas sleep furiously', 20]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-21-92bd41005ac7> in <module>()
     13 
     14 # ¡OJO! si intentamos acceder a un índice que no existe, el intérprete nos dará error
---> 15 print(misCosas[8])

IndexError: list index out of range

Podemos acceder a porciones de una lista usando una notación especial en los corchetes del índice. nombre_de_lista[n:m] devuelve la secuencia de elementos de la lista que va desde el índice n hasta el m.


In [22]:
# imprime los tres primeros elementos de la variable dias
print(dias[:3])
# imprime elementos del 3º al 6ª de la variable números
print(numeros[2:6])
# imprime los tres últimos números de la variable números
print(numeros[-3:-1])

print(dias[3:5])


['lunes', 'martes', 'miércoles']
[3, 4, 5, 6]
[8, 9]
['jueves', 'viernes']

Las cadenas, al igual que las listas, son estructuras ordenadas. No lo hemos mencionado antes, pero podemos utilizar esta misma notación de índices para acceder a elementos y a porciones de una cadena.


In [23]:
cadena = 'perrogatorana'
print(cadena[:5])
print(cadena[5:9])
print(cadena[-4:])

# practica los índices en listas y en cadenas, es muy importante tener solutura


perro
gato
rana

In [24]:
pal1 = 'perro'
pal2 = 'soles'
pal3 = 'azul'
pal4 = 'amigos'
pal5 = 'cafés'
pal6 = 'hola'

print(pal1[-1] == 's')
print(pal2[-1] == 's')
print(pal3[-1] == 's')
print(pal4[-1] == 's')
print(pal5[-1] == 's')
print(pal6[-1] == 's')

print("---------------------")

print(pal1.endswith('s'))
print(pal2.endswith('s'))
print(pal3.endswith('s'))
print(pal4.endswith('s'))
print(pal5.endswith('s'))
print(pal6.endswith('s'))


False
True
False
True
True
False
---------------------
False
True
False
True
True
False

Métodos sobre listas

Como con las cadenas, en las listas existen una serie de funciones y métodos que podemos ejecutar y que nos van a permitir realizar operaciones y transformar dichas listas de distintas maneras, p. ej.:

  • podemos contar el número de elementos de una lista con la función len().
  • podemos buscar elementos en una lista sin saber la posición concreta que ocupan con el método .index().
  • podemos añadir nuevos elementos al final de una lista con el método .append().
  • podemos añadir nuevos elementos en una posición concreta de una lista con el método .insert().
  • podemos eliminar elementos de una lista con los métodos .remove() y .pop().
  • podemos concatenar una lista con otra con el método .extend().

Para más info, consulta los métodos que podemos aplicar a las listas.


In [25]:
# creamos una lista vacía
miLista = []
# ¿está realmente vacía?
print(len(miLista))


0

In [26]:
# ¿qué posición ocupa "jueves" o "domingo" en la lista días
print(dias.index('jueves'))
print(dias.index('domingo'))

# esto, sin embargo, dará error
print(dias.index('DOMINGO'))


3
6
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-26-5564dee653e9> in <module>()
      4 
      5 # esto, sin embargo, dará error
----> 6 print(dias.index('DOMINGO'))

ValueError: 'DOMINGO' is not in list

In [27]:
miLista = []

# añadimos varios elementos nuevos y vemos cómo va aumentando la lista
miLista.append(2)
print(miLista)

miLista.append('palabra')
print(miLista)

miLista.append(25**3)
print(miLista)


[2]
[2, 'palabra']
[2, 'palabra', 15625]

In [28]:
# añadimos como cuarto elemento otra lista de elementos: fíjate en la estructura del resultado
miLista.append(numeros)
print(miLista)
print(len(miLista))


[2, 'palabra', 15625, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]
4

In [29]:
# ¿cuántos elementos tiene miLista?

# estas dos líneas son equivalentes, pero tienen sutiles diferencias.
# aquí, concatenamos con el símbolo + tres cadenas dentro de una misma intrucción print
# uno de los elementos es originariamente un número entero, por eso hay que transformarlo antes con str
print('la lista miLista tiene ' + str(len(miLista)) + ' elementos')

# aquí, imprimimos tres elementos diferentes en una misma instrucción print
print('la lista miLista tiene', len(miLista), 'elementos')


la lista miLista tiene 4 elementos
la lista miLista tiene 4 elementos

In [30]:
print(miLista)

# insertamos como segundo elemento otro nuevo valor
miLista.insert(1, 'segundo elemento')
print(miLista)

miLista[1] = "second element"
print(miLista)


[2, 'palabra', 15625, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]
[2, 'segundo elemento', 'palabra', 15625, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]
[2, 'second element', 'palabra', 15625, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]

In [31]:
# más ejemplos con los métodos insert y append
l = []
print(l)

l.append('hola')
print(l)

l.append('adiós')
print(l)

l.insert(1, 'segundo elemento')
print(l)

l.insert(2, 'otra cosa')
print(l)


[]
['hola']
['hola', 'adiós']
['hola', 'segundo elemento', 'adiós']
['hola', 'segundo elemento', 'otra cosa', 'adiós']

In [32]:
dias = ["lunes", "martes", "miércoles", "jueves", "viernes", "sábado", "domingo"]
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

print(dias)

# eliminarmos el elemento 2 y el elemento "palabra" de miLista
dias.pop(2)
print(dias)


['lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado', 'domingo']
['lunes', 'martes', 'jueves', 'viernes', 'sábado', 'domingo']

In [33]:
dias.remove('sábado')
print(dias)


['lunes', 'martes', 'jueves', 'viernes', 'domingo']

In [34]:
letras = ['a', 'b', 'c', 'a']
print(letras.count('aaaaa'))

letras.remove('a')
print(letras)
print(letras.count('a'))


0
['b', 'c', 'a']
1

In [35]:
# también puedo eliminar el último elemento de la lista
miLista.pop(-1)
print(miLista)


[2, 'second element', 'palabra', 15625]

In [36]:
# más pruebas concatenando listas
dias = ["lunes", "martes", "miércoles", "jueves", "viernes", "sábado", "domingo"]
dias.extend(numeros)
print(dias)

# fíjate en que la lista numeros crece de manera indefinida
numeros.extend(dias)
print(numeros)


['lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado', 'domingo', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 'lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado', 'domingo', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Tuplas

Las tuplas de Python son una estructura de datos que almacenan una colección de diferentes tipos de información en forma de secuencia ordenada. Estas tuplas pueden guardar valores de cualquiera de los tipos que hemos visto anteriormente (cadenas, números y booleanos) e incluso otras listas o tuplas de manera anidada. La principal diferencia con las listas es que las tuplas son inmutables: no podemos modificarlas, ni añadiendo o eliminando elementos, ni reordenado, etc.

Las tuplas se declaran especificando la colección de elementos entre paréntesis y separando los elementos con comas.


In [37]:
# creo tres tripletas, cada una almacenando el nombre, apellido y sexo de unas personas ficticias
tripleta1 = ("Carlos", "Pujol", "H")
tripleta2 = ("Montse", "Santos", "M")
tripleta3 = ("Ana", "Ruiz", "M")

# creo una lista de personas y añado las tripletas por orden
personas = []
personas.append(tripleta1)
personas.append(tripleta2)
personas.append(tripleta3)
print(personas)

# las tuplas son secuencias ordenadas, y como tales podemos acceder a sus elementos
# a través de índices numéricos
print(len(personas[0]))
print(personas[1][1])


[('Carlos', 'Pujol', 'H'), ('Montse', 'Santos', 'M'), ('Ana', 'Ruiz', 'M')]
3
Santos

Diccionarios

Los diccionarios de Python son una estructura de datos que almacena una colección de pares clave:valor. La clave es siempre una cadena, y el valor puede contener cualquiera de los tipos que hemos visto anteriormente (cadenas, números y booleanos) e incluso otras listas, tuplas o diccionarios de manera anidada. Al contrario que las listas y las tuplas, los diccionarios no son estructuras ordenadas. Por lo tanto, nos interesará utilizar diccionarios cuando necesitamos almacenar y acceder directamente a información cuyo nombre conozcamos.

Podemos definir diccionarios de varias maneras:


In [38]:
# entre llaves, separando claves y valores con dos puntos, y separando pares con comas
victor = {"nombre": "Victor", "apellido": "Peinado", "sexo": "H", "edad": 38}
print(victor)

# declarando el diccionario como una estructura vacía y añadiendo los pares clave:valor después
antonio = {}
antonio["nombre"] = "Antonio"
antonio["apellido"] = "Santos"
antonio["sexo"] = "H"
antonio["edad"] = 26
print(antonio)

# creo una lista de diccionarios: OJO, la lista sí está ordenada
personas = [victor, antonio]
print(personas)

print(type(personas))
print(type(personas[-1]))
print(type(personas[-1]["edad"]))


{'nombre': 'Victor', 'edad': 38, 'apellido': 'Peinado', 'sexo': 'H'}
{'nombre': 'Antonio', 'edad': 26, 'apellido': 'Santos', 'sexo': 'H'}
[{'nombre': 'Victor', 'edad': 38, 'apellido': 'Peinado', 'sexo': 'H'}, {'nombre': 'Antonio', 'edad': 26, 'apellido': 'Santos', 'sexo': 'H'}]
<class 'list'>
<class 'dict'>
<class 'int'>

Podemos acceder a los elementos del diccionaro a través del nombre de la clave:


In [39]:
print(victor['nombre'])

print(antonio['apellido'])

print(personas[1]['nombre'])


Victor
Santos
Antonio

Métodos sobre diccionarios

Como con otras estructuras de datos, los diccionarios proporcionan una serie de funciones y métodos que podemos ejecutar y que nos van a permitir manipular y acceder a dichos diccionarios de distintas maneras, p. ej.:

  • podemos contar el número de elementos de una diccionario la función len().
  • podemos recuperar una lista conteniendo las claves de un diccionario con el método .keys().
  • podemos recuperar una lista conteniendo los valores de un diccionario con el método .values().
  • podemos eliminar un elemento de un diccionario con el método .pop().

Para más info, consulta los métodos que podemos aplicar a los diccionarios.


In [40]:
# ¿cuántos pares clave:valor tiene el diccionario antonio?
print(len(antonio))

# dame las claves
print(antonio.keys())

# dame los valores
print(antonio.values())


4
dict_keys(['nombre', 'edad', 'apellido', 'sexo'])
dict_values(['Antonio', 26, 'Santos', 'H'])

In [41]:
# recuerda que para crear nuevos pares clave:valor, basta con asignarles un valor
antonio['altura'] = 1.79

# podemos comprobar si el diccionario tiene determinadas claves
print('email' in antonio)
print('altura' in antonio)
print(antonio)


False
True
{'nombre': 'Antonio', 'edad': 26, 'apellido': 'Santos', 'sexo': 'H', 'altura': 1.79}

In [42]:
# eliminamos la clave altura de antonio
antonio.pop('altura') 
print('altura' in antonio) # y esto ahora devuelve False
print(antonio)


False
{'nombre': 'Antonio', 'edad': 26, 'apellido': 'Santos', 'sexo': 'H'}

Los diccionarios pueden contener otros diccionarios anidados, lo que conlleva que podemos manejar estructuras bastante complejas. A modo de ejemplo:


In [43]:
# creo un diccionario de la familia Pig, en principio vacío
familiaPig = {}

# creo varios diccionarios por cada miembro de la familia
peppa = {"nombre": "Peppa", "apellido": "Pig", "email": "peppa@pig.com",}
george = {"nombre": "George", "apellido": "Pig", "email": "george@pig.com",}
daddy = {"nombre": "Daddy", "apellido": "Pig", "email": "daddy@pig.com",}
mommy = {"nombre": "Mommy", "apellido": "Pig", "email": "mommy@pig.com",}


familiaPig['hija'] = peppa
familiaPig['hijo'] = george
familiaPig['padre'] = daddy
familiaPig['madre'] = mommy

print(familiaPig)


{'madre': {'nombre': 'Mommy', 'apellido': 'Pig', 'email': 'mommy@pig.com'}, 'hijo': {'nombre': 'George', 'apellido': 'Pig', 'email': 'george@pig.com'}, 'hija': {'nombre': 'Peppa', 'apellido': 'Pig', 'email': 'peppa@pig.com'}, 'padre': {'nombre': 'Daddy', 'apellido': 'Pig', 'email': 'daddy@pig.com'}}

In [44]:
# ¿Cuál es el email de la madre?
print(familiaPig["madre"]["email"])

# ¿Y el nombre de la hija?
print(familiaPig["hija"]["nombre"])

# en lugar de un diccionario, puedo crear también una lista con los miembros de la familia ordenados por edad
familia = [daddy, mommy, peppa, george]

# ahora solo puedo acceder por índices, así que ¿cuál es el email del primer miembro de la familia?
print(familia[0]["email"])

# ¿Y el nombre del miembro más joven?
print(familia[-1]["nombre"])


mommy@pig.com
Peppa
daddy@pig.com
George

In [45]:
# esta celda no hace nada, salvo insertar una imagen externa
from IPython.core.display import Image
Image('http://peppapigjuegos.com/img/wallpapers/2pag/peppa_pig_family.jpg')


Out[45]:

Ejercicio final en clase

En clase se nos ocurre cómo podemos crearnos lista de películas y series de televisión que nos gustan. Definimos fichas de películas y series usando diccionarios.


In [46]:
pelicula = {}
pelicula['titulo'] = "The Arrival"
pelicula['ano'] = 2016
pelicula['reparto'] = ["Amy Adams", "Jeremy Renner", "Forest Whitaker",]
pelicula['esBuena'] = True

print(pelicula)

print("----------------------------")
# imprime el título
print("La película se titula", pelicula['titulo'], ".")
# y más datos asociados a la peli
print("La película tiene" + str(len(pelicula["reparto"])) + "actores" + ".")

# normalmente no necesitaremos esto, pero aquí hay un ejemplo de cómo formatear 
# cadenas complejas con print
print("La película se titula {} y tiene {} actores.".format(pelicula["titulo"], len(pelicula["reparto"])))

# creamos una ficha para una serie
serie = {"titulo": "Narcos", "ano":2015, "reparto":["Uno", "Otro"]}
print(serie)
print(serie["titulo"])
# añadimos más datos
serie["esBuena"] = True
print(serie)


{'titulo': 'The Arrival', 'reparto': ['Amy Adams', 'Jeremy Renner', 'Forest Whitaker'], 'ano': 2016, 'esBuena': True}
----------------------------
La película se titula The Arrival .
La película tiene3actores.
La película se titula The Arrival y tiene 3 actores.
{'titulo': 'Narcos', 'reparto': ['Uno', 'Otro'], 'ano': 2015}
Narcos
{'titulo': 'Narcos', 'reparto': ['Uno', 'Otro'], 'ano': 2015, 'esBuena': True}

Para simular una colección de películas y series vistas en orden cronológico, creo un lista de Pyhton en la que voy incluyendo las fichas de películas a medida que las voy viendo.


In [47]:
coleccion = []
coleccion.append(serie)
print(coleccion)

coleccion.append(pelicula)
print(coleccion)

# añado una tercera serie, y la meto en la colección
serie = {"titulo": "The Expanse", "ano":2015, "reparto":["Fulano", "Mengano"]}
coleccion.append(serie)
print(coleccion)


[{'titulo': 'Narcos', 'reparto': ['Uno', 'Otro'], 'ano': 2015, 'esBuena': True}]
[{'titulo': 'Narcos', 'reparto': ['Uno', 'Otro'], 'ano': 2015, 'esBuena': True}, {'titulo': 'The Arrival', 'reparto': ['Amy Adams', 'Jeremy Renner', 'Forest Whitaker'], 'ano': 2016, 'esBuena': True}]
[{'titulo': 'Narcos', 'reparto': ['Uno', 'Otro'], 'ano': 2015, 'esBuena': True}, {'titulo': 'The Arrival', 'reparto': ['Amy Adams', 'Jeremy Renner', 'Forest Whitaker'], 'ano': 2016, 'esBuena': True}, {'titulo': 'The Expanse', 'reparto': ['Fulano', 'Mengano'], 'ano': 2015}]