Skip to content

Commit 39c6c8f

Browse files
author
FernandaOchoa
authored
add: module 8
1 parent 2c0eae2 commit 39c6c8f

File tree

2 files changed

+626
-0
lines changed

2 files changed

+626
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,284 @@
1+
# Introducción
2+
3+
Con frecuencia tendrás que trabajar con datos más complejos que cadenas y valores booleanos. En este módulo se te proporcionan las herramientas para hacerlo. Ahora se acotará el tema mediante el análisis de un escenario.
4+
5+
## Escenario: Análisis de un sistema solar
6+
7+
Imagina que vas a crear un programa para analizar el número de lunas en diferentes planetas del sistema solar. Quieres mostrar información al usuario y poder calcular valores diferentes, como el número total de lunas en el sistema solar. Sería tedioso hacerlo con variables, que solo pueden almacenar una cadena o un número.
8+
9+
En este módulo, crearás un programa que puede realizar estos tipos de operaciones. Utilizaremos diccionarios de Python para modelar los datos. Al final del módulo, podrás trabajar con diccionarios de Python para almacenar datos complejos.
10+
11+
## ¿Qué aprenderás?
12+
En este módulo, podrás hacer lo siguiente:
13+
14+
* Identificar cuándo se debe usar un diccionario.
15+
* Crear y modificar datos dentro de un diccionario.
16+
* Trabajar con métodos de diccionario para acceder a los datos del diccionario.
17+
18+
## ¿Cuál es el objetivo principal?
19+
20+
Usar una estructura de diccionario dentro de la aplicación para almacenar datos en un formato que facilite la búsqueda de valores.
21+
22+
---
23+
24+
## Introducción a los diccionarios de Python
25+
26+
Las variables de Python pueden almacenar varios tipos de datos. Anteriormente, hemos aprendido que puedes almacenar cadenas y números:
27+
28+
```
29+
name = 'Earth'
30+
moons = 1
31+
```
32+
33+
Aunque esto funciona para cantidades más pequeñas de datos, puede ser cada vez más complejo cuando se trabaja con datos relacionados. Imagina que quieres almacenar información sobre las lunas de la Tierra y la Luna.
34+
35+
```
36+
earth_name = 'Earth'
37+
earth_moons = 1
38+
39+
jupiter_name = 'Jupiter'
40+
jupiter_moons = 79
41+
```
42+
43+
Observa cómo se duplican las variables con prefijos diferentes. Esto puede resultar difícil de manejar. Con frecuencia tendrás que trabajar con conjuntos de datos relacionados, como por ejemplo: el promedio de precipitaciones durante varios meses en distintas ciudades, almacenarlos como valores individuales no es una opción viable. Aquí es donde los diccionarios de Python pueden ayudarnos.
44+
45+
Los diccionarios de Python permiten trabajar con conjuntos de datos relacionados. Un diccionario es una colección de pares clave-valor. Piensa que es como un grupo de variables dentro de una cajita, donde la clave es el nombre de la variable y el valor es el valor almacenado en su interior.
46+
47+
### Creación de un diccionario
48+
49+
Python usa llaves (``{ }``) y dos puntos (``:``) para indicar un diccionario. Puedes crear un diccionario vacío y agregar valores más adelante, o bien rellenarlo en el momento de la creación. Cada clave o valor está separado por dos puntos y el nombre de cada clave se incluye entre comillas como un literal de cadena. Como la clave es un literal de cadena, puede usar el nombre que sea adecuado para describir el valor(Sí el que tu quieras).
50+
51+
Ahora crearemos un diccionario para almacenar el nombre del planeta Tierra y el número de lunas que tiene:
52+
53+
```
54+
planet = {
55+
'name': 'Earth',
56+
'moons': 1
57+
}
58+
```
59+
60+
Tiene dos claves, `'name'` y `'moons'`. Cada una se comporta igual que una variable: tienen un nombre único y almacenan un valor. Pero se incluyen dentro de una única variable más grande, denominada `planet`.
61+
62+
Como sucede con las variables convencionales, debes asegurarte de que usas los tipos de datos correctos. En el valor `moons` de `1` en el ejemplo anterior, no se han incluido comillas alrededor del número, porque se quiere usar un entero. Si hubieras usado `'1'`, Python lo vería como una cadena, lo que afectaría a la capacidad de realizar cálculos.
63+
64+
A diferencia de las variables convencionales, los nombres de clave *no* necesitan seguir las reglas de nomenclatura estándar para Python. Por lo que te recomendamos ser más descriptivo en el código.
65+
66+
### Lectura de los valores de un diccionario
67+
68+
Podemos leer valores dentro de un diccionario. Los objetos de diccionario tienen un método llamado `get` que puedes usar para acceder a un valor mediante su clave. Si queremos imprimir `name`, funcionaría de la siguiente manera:
69+
70+
```
71+
print(planet.get('name'))
72+
73+
# Muestra Earth
74+
```
75+
76+
Como podrías sospechar, el acceso a los valores de un diccionario es una operación común. Afortunadamente, hay un acceso directo. También puedes pasar la clave entre corchetes (`[ ]`). Utilizando menos código que `get` y la mayoría de los programadores utilizan esta sintaxis en su lugar. Podemos reescribir el ejemplo anterior de la siguiente forma:
77+
78+
```
79+
# planet['name'] es idéntico a usar planet.get('name')
80+
print(planet['name'])
81+
82+
# Muestra Earth
83+
```
84+
Aunque el comportamiento de `get` y los corchetes (`[ ]`) suele ser el mismo para recuperar elementos, hay una diferencia principal. Si una clave no está disponible, `get` devuelve `None` y `[ ]` genera un error `KeyError`.
85+
86+
```
87+
wibble = planet.get('wibble') # Regresa None
88+
wibble = planet['wibble'] # Arroja un KeyError
89+
```
90+
91+
*Cómo te podrás dar cuenta, funcionan con una estructura similar a las listas. Ya que en el caso de las listas accedemos a cada uno de sus elementos a través de su índice (posición iniciando en 0) y en el caso de un diccionario, accedemos a sus elementos mediante la 'clave'*
92+
93+
### Modificación de valores de un diccionario
94+
95+
También puedes modificar valores dentro de un objeto de diccionario, con el método `update`. Este método acepta un diccionario como parámetro (sí, parámetro por que un diccionario es un rango de valores) y actualiza los valores existentes con los nuevos que proporciones. Si quieres cambiar `name` para el diccionario `planet`, puedes usar lo siguiente, por ejemplo:
96+
97+
```
98+
planet.update({'name': 'Makemake'})
99+
100+
# name ahora es Makemake
101+
```
102+
103+
Al igual que se usa el acceso directo de corchetes (`[ ]`) para leer valores, se puede utilizar para modificar valores. La principal diferencia en la sintaxis es que se usa `=` (a veces denominado operador de asignación) para proporcionar un nuevo valor. Para modificar el ejemplo anterior y cambiar el nombre, puedes usar lo siguiente:
104+
105+
```
106+
planet['name'] = 'Makemake'
107+
108+
# name is now set to Makemake
109+
```
110+
111+
La principal ventaja de usar `update` es la capacidad de modificar varios valores en una operación. Los dos ejemplos siguientes son lógicamente los mismos, pero la sintaxis es diferente. Puedes usar la sintaxis que creas más adecuada. Para actualizar valores individuales, la mayoría de los desarrolladores eligen corchetes.
112+
113+
En el ejemplo siguiente se hacen las mismas modificaciones en la variable `planet` y se actualizan el nombre y las lunas. Ten en cuenta que al usar `update` realizas una sola llamada a la función, mientras que el uso de corchetes implica dos llamadas.
114+
115+
```
116+
# Usando update
117+
planet.update({
118+
'name': 'Jupiter',
119+
'moons': 79
120+
})
121+
122+
# Usando corchetes
123+
planet['name'] = 'Jupiter'
124+
planet['moons'] = 79
125+
```
126+
127+
### Adición y eliminación de claves
128+
129+
No es necesario crear todas las claves al inicializar un diccionario. De hecho, no es necesario crear ninguna. Siempre que quieras crear una clave, asígnala como harías con una existente.
130+
131+
Imagina que quieres actualizar `planet` para incluir el período orbital en días:
132+
133+
```
134+
planet['orbital period'] = 4333
135+
136+
# el diccionario planet ahora contiene: {
137+
# name: 'jupiter'
138+
# moons: 79
139+
# orbital period: 4333
140+
# }
141+
```
142+
143+
> Los nombres de una clave, como todo lo demás en Python, distinguen mayúsculas de minúsculas. Como resultado, 'name' y 'Name' se consideran dos claves independientes en un diccionario de Python.
144+
145+
Para quitar una clave, usa `pop`. `pop` devuelve el valor y quita la clave del diccionario. Para eliminar `orbital period`, puedes usar el código siguiente:
146+
147+
```
148+
planet.pop('orbital period')
149+
150+
# el diccionario planet ahora contiene: {
151+
# name: 'jupiter'
152+
# moons: 79
153+
# }
154+
```
155+
156+
### Tipos de data complejos
157+
Los diccionarios pueden almacenar cualquier tipo de valor, incluidos otros diccionarios. Esto te permite modelar datos complejos según sea necesario. Imagina que debes que almacenar el diámetro de `planet`, que se podría medir alrededor de su ecuador o de los polos. Puedes crear otro diccionario dentro de `planet` para almacenar esta información:
158+
159+
```
160+
# Añadimos los datos
161+
planet['diameter (km)'] = {
162+
'polar': 133709,
163+
'equatorial': 142984
164+
}
165+
166+
# el diccionario planet ahora contiene: {
167+
# name: 'Jupiter'
168+
# moons: 79
169+
# diameter (km): {
170+
# polar: 133709
171+
# equatorial: 142984
172+
# }
173+
# }
174+
```
175+
Para recuperar valores en un diccionario anidado, debe puedes utilizar corchetes `[ ]` o llamar a `get`.
176+
177+
```
178+
print(f'{planet['name']} polar diameter: {planet['diameter (km)']['polar']}')
179+
180+
# Salida: Jupiter polar diameter: 133709
181+
```
182+
183+
## Programación dinámica con diccionarios
184+
185+
En el programa, quieres realizar varios cálculos, como el del número total de lunas. Además, a medida que progreses en programación, es posible que necesites cargar este tipo de información desde archivos o una base de datos, en lugar de programarlos directamente en Python.
186+
187+
Para ayudar a admitir estos escenarios, Python te permite tratar las claves y los valores dentro de un diccionario como una lista. Puedes determinar de manera dinámica las claves y los valores, y realizar varios cálculos.
188+
189+
Imagina un diccionario en el que se almacenan cantidades mensuales de precipitaciones. Es probable que tengas claves para cada mes y sus precipitaciones asociadas. Quieres sumar el total de precipitaciones, y escribir el código para realizar la operación mediante cada clave individual sería bastante tedioso.
190+
191+
### Recuperación de todas las claves y valores
192+
El método `keys()` devuelve un objeto de lista que contiene todas las claves. Puedes usar este método para iterar por todos los elementos del diccionario.
193+
194+
Imagina que tiene el siguiente diccionario, en el que se almacenan los últimos tres meses de precipitaciones (rainfall).
195+
196+
```
197+
rainfall = {
198+
'october': 3.5,
199+
'november': 4.2,
200+
'december': 2.1
201+
}
202+
```
203+
204+
Imagina que quiere mostrar la lista de todas las precipitaciones. Puedes escribir el nombre de cada mes, pero sería tedioso, en este caso hacemos uso del método `keys()`.
205+
206+
```
207+
for key in rainfall.keys():
208+
print(f'{key}: {rainfall[key]}cm')
209+
210+
# Salida:
211+
# october: 3.5cm
212+
# november: 4.2cm
213+
# december: 2.1cm
214+
```
215+
*Para cada clave en las claves(keys()) contenidas en `rainfalls`: muestra la clave que estás iterando (meses): así como el valor (número) de la clave que estamos iterando (clave-mes : valor-número) en cm*
216+
217+
### Determinando la existencia de una clave en un diccionario
218+
219+
Al actualizar un valor en un diccionario, Python sobrescribirá el valor existente o creará uno en su defecto, si la clave no existe. Si quieres agregar un valor en lugar de sobrescribirlo, puedes comprobar si la clave existe mediante `in`. Por ejemplo, si quieres agregar un valor a diciembre o crear uno si no existe, puedes usar lo siguiente:
220+
221+
```
222+
# El valor de december: 2.1cm
223+
224+
# Si, 'december' existe en rainfall
225+
if 'december' in rainfall:
226+
# rainfall [en la posición december] es igual a
227+
# rainfall [en la posición december] + 1 (2.1+1)
228+
rainfall['december'] = rainfall['december'] + 1
229+
230+
# Si no:
231+
else:
232+
233+
# rainfall [en la posición december] es igual a 1
234+
rainfall['december'] = 1
235+
236+
# Como december si existe, el valor será 3.1
237+
```
238+
### Recuper todos los valores de un diccionario
239+
240+
De forma similar a `keys()`, `values()` devuelve la lista de todos los valores de un diccionario sin sus claves correspondientes. Esto puede resultar útil cuando se usa la clave con fines de etiquetado, como en el ejemplo anterior, en el que las claves son el nombre del mes. Puedes usar `values()` para determinar el importe total de las precipitaciones:
241+
242+
```
243+
#Total de precipitaciones 0
244+
total_rainfall = 0
245+
246+
# Para cada valor en los valores de rainfall
247+
for value in rainfall.values():
248+
249+
# El total de las precipitaciones será igual a ese mismo + el valor que se está iterando
250+
251+
total_rainfall = total_rainfall + value
252+
253+
# Muestra 'Hay un total de precipitaciones (el valor total) en centímetros en el último cuarto (haciendo referencia al cuarto del año)
254+
255+
print(f'There was {total_rainfall}cm in the last quarter')
256+
257+
# Salida:
258+
# There was 10.8cm in the last quarter
259+
```
260+
261+
## Resumen
262+
263+
La mayoría de los programas necesitan datos más complejos que los valores de cadena y número. En el escenario de este módulo, has intentado trabajar con información sobre los planetas del sistema solar. Esta información incluía propiedades como el número de lunas y la circunferencia.
264+
265+
Mediante los diccionarios, has podido crear una variable para almacenar todos los datos relacionados. Después, has usado `keys` y `values` para interactuar directamente con los datos, sin utilizar nombres de clave para realizar cálculos.
266+
267+
Los diccionarios de Python son objetos flexibles, lo que permite modelar datos complejos y relacionados.
268+
269+
En este módulo, has aprendido a:
270+
271+
* Identificar cuándo se debe usar un diccionario.
272+
* Crear y modificar datos dentro de un diccionario.
273+
* Usar métodos de diccionario para acceder a los datos del diccionario.
274+
275+
---
276+
277+
Curso Propedútico de Python para Launch X - Innovacción Virtual.
278+
279+
Material desarrollado con base en los contenidos de MSLearn y la metáfora de LaunchX, traducción e implementación por: Fernanda Ochoa - Learning Producer de LaunchX.
280+
281+
Redes:
282+
* GitHub: [FernandaOchoa](https://github.com/FernandaOchoa)
283+
* Twitter: [@imonsh](https://twitter.com/imonsh)
284+
* Instagram: [fherz8a](https://www.instagram.com/fherz8a/)

0 commit comments

Comments
 (0)