Usuario: vivasm.
Nombre: Mariana Vivas.
Institución: Universidad Central de Venezuela.
Insertamos los datos en el diccionario llamado 'compas':
compas={
'hernandezj':{
'nombre': 'Juan',
'apellido': 'Hernández',
'país': 'Colombia',
'residencia': 'Bogotá',
'edad': '24',
'institución': 'Universidad Nacional de Colombia',
'hobbie': 'leer'},
'malamboj':{
'nombre': 'Jorge',
'apellido': 'Malambo',
'país': 'Colombia',
'residencia': 'Bogotá',
'edad': '39',
'institución': 'Universidad Nacional de Colombia',
'hobbie': 'tallar madera'},
'nicole':{
'nombre': 'Angie',
'apellido': 'Hernández',
'país': 'Colombia',
'residencia': 'Bucaramanga',
'edad': '23',
'institución': 'Universidad Industrial de Santander',
'hobbie': 'pintar'},
'navasa':{
'nombre': 'Alfonso',
'apellido': 'Navas',
'país': 'Colombia',
'residencia': 'Bogotá',
'edad': '24',
'institución': 'Universidad Nacional de Colombia',
'hobbie': 'crossfit'},
'ladinoj': {
'nombre': 'José',
'apellido': 'Ladino',
'país': 'Colombia',
'residencia': 'Bogotá',
'edad': '24',
'institución': 'Universidad Nacional de Colombia',
'hobbie': 'skate'},
'cristian.velandia':{
'nombre': 'Cristian',
'apellido': 'Velandia',
'país': 'Colombia',
'residencia': 'Bogotá',
'edad': '27',
'institución': 'Universidad Nacional de Colombia',
'hobbie': 'anime'},
'fernandezn':{
'nombre': 'Nicolás',
'apellido': 'Fernández',
'país': 'Argentina',
'residencia': 'Lima',
'edad': '27',
'institución': 'Universidad Nacional Mayor de San Marcos',
'hobbie': 'piano'},
'carrilloj':{
'nombre': 'Juan',
'apellido': 'Carrillo',
'país': 'Colombia',
'residencia': 'Bogotá',
'edad': '25',
'institución': 'Universidad Nacional de Colombia',
'hobbie': 'basket'},
'yohany':{
'nombre': 'Yohany',
'apellido': 'Rodríguez',
'país': 'Colombia',
'residencia': 'Bogotá',
'edad': '46',
'institución': 'Universidad Antonio Mariño',
'hobbie': 'montar bicicleta'}
}
Comprobamos que al buscar un usuario en el diccionario, obtenemos otro diccionario con sus datos:
compas['hernandezj']
Creamos la función que filtre los usuarios de las personas por país:
def findbylocation(pais):
#agregamos a la lista si el pais colocado concuerda con el pais del usuario
lista=[user for user in compas if pais == compas[user]['país']]
return(lista)
Probamos para varios países:
findbylocation('Colombia')
findbylocation('Argentina')
findbylocation('Venezuela')
Utilizando esta función, creamos la tabla de datos de cada usuario en ese país:
def bycountrydata():
#Pedimos al usuario que indique un país
pais=input('Indique un país: ')
#Obtenemos los usuarios de las personas en ese país
compasbycountry=findbylocation(pais)
#Para la tabla, obtenemos los nombres de los keys de los diccionarios de cada persona
keylist=list(compas['hernandezj'].keys())
keylist.remove('país') #eliminamos el país, porque estamos escogiendo con esa etiqueta
#str formating para obtener algo legible
print("{:<17} | {:<8} | {:<10} | {:<12} | {:<4} | {:<38} | {:<30}".format('usuario', *keylist))
print('_____________________________________________________________________________________________________________________________')
#iteramos en los key (k) y los values (v) del diccionario
for k, v in compas.items():
if k in compasbycountry:
listapersona=[] #lista para los valores de cada persona
#volvemos a iterar en los diccionarios internos
for ki,vi in v.items():
if ki != 'país':
listapersona.append(vi) #introducimos cada valor del diccionario, menos el país.
print("{:<17} | {:<8} | {:<10} | {:<12} | {:<4} | {:<38} | {:<30}".format(k, *listapersona))
else: continue
Probamos con varios países:
bycountrydata()
bycountrydata()
Podemos calcular el promedio de edades en el diccionario iterando:
sumatoria = 0 #inicializamos la variable para sumar
#iteramos en los key (k) y los values (v) del diccionario
for k,v in compas.items():
#volvemos a iterar en los diccionarios internos
for ki,vi in compas[k].items():
if ki == 'edad': #obtenemos solo el valor en el key 'edad'
sumatoria+=int(vi) #sumamos todos los valores en una variable
promedio=sumatoria/len(compas.keys()) #dividimos entre la cantidad de usuarios en compas
print(promedio)
Y podemos obtener una lista de las instituciones sin repetición iterando y utilizando sets:
instituciones=[] #inicializamos la lista donde irán las instituciones
#iteramos en los key (k) y los values (v) del diccionario
for k,v in compas.items():
#volvemos a iterar en los diccionarios internos
for ki,vi in compas[k].items():
if ki == 'institución':
instituciones.append(vi) #insertamos en la lista los valores correspondientes al key 'institución'
else: continue
#utilizamos set para obtener variables sin repetición
print(', '.join(set(instituciones))) #imprimimos con una coma y un espacio entre ellos
Una manera más eficiente de hacer esto es utilizando la libreria 'pandas':
import pandas as pd
compasdf=pd.DataFrame.from_dict(compas, orient='index')
compasdf
Podemos filtrar dando condiciones para las entradas en las filas:
compasdf[:][compasdf["país"] == 'Colombia']
compasdf[:][compasdf["país"] == 'Argentina']
El promedio se puede calcular con una función:
#cambiamos el tipo de la entrada a numérico
ageserie=pd.to_numeric(compasdf['edad'])
#calculamos la media de la serie
ageserie.mean()
Para saber los datos de una columna solo tenemos que usar .unique():
compasdf['institución'].unique()
O que países hay en la data con una línea de código, sin iterar:
compasdf['país'].unique()