Introducci贸n

1

El Zen de Python

Conjuntos

2

Sets

3

Modificando conjuntos

4

Operaciones con conjuntos

5

Playgrounds: Elimina elementos duplicados usando conjuntos

Comprehensions

6

List Comprehension

7

Dictionary Comprehension

8

Dictionary Comprehension: condition

9

Playgrounds: Crea una lista usando List Comprehension

10

Lists vs. Tuples vs. Sets

Funciones

11

Funciones

12

Funciones: return

13

Par谩metros por defecto y m煤ltiples returns

14

El scope

15

Refactor game

16

Playgrounds: Tienda de Tecnolog铆a

17

Funciones an贸nimas: lambda

18

Higher order function: una funci贸n dentro de otra funci贸n

19

Map

20

Map con diccionarios

21

Reto: map con inmutabilidad

22

Playgrounds: Multiplica todos los elementos por dos

23

Filter

24

Playgrounds: Retorna solo palabras de 4 letras y m谩s

25

Reduce

M贸dulos

26

M贸dulos

27

Mis propios m贸dulos

28

M贸dulos como scripts: __name__ y __main__

29

Paquetes

30

Playgrounds: Calcular la suma de todas las compras

Manipulaci贸n de archivos y errores

31

Iterables

32

Errores en Python

33

Manejo de excepciones

34

Playgrounds: Captura la excepci贸n: ZeroDivisionError

35

Leer un archivo de texto

36

Escribir en un archivo

37

Leer un CSV

38

Playgrounds: Lee un CSV para calcular el total de gastos

Gr谩ficas en Python

39

Creando una gr谩fica

40

Reto: graficando la poblaci贸n de un pa铆s

41

Reto: graficando la poblaci贸n mundial

Pr贸ximos pasos

42

隆Conoce otros proyectos de este curso!

43

Reconoce tu proceso y certif铆cate

44

Toma el Curso de PIP y Entornos Virtuales con Python

No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Filter

23/44
Recursos

Aportes 53

Preguntas 13

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

FILTER
La funci贸n filter(), devuelve un valor que esta siendo iterado de la cual su resultado ser谩 el valor que se esta buscando en el filter

SINTAXIS

_filter (function, iterable_

Valores.

filter: Una funci贸n que se ejecutara para cada elemento iterable
iterable: Lo que se va a filtrar.

Ejercicio:

Tenemos una lista de estudiantes de la cual debemos saber quienes son de Colombia y quienes son considerados mayores de edad al tener igual o mas de 18 a帽os y cuantos son.

people = [
  {
    'name' : 'Pedro',
    'country': 'Colombia',
    'age' : 18,
    'course' : 'developer'
  },
  {
    'name' : 'Juan',
    'country': 'Per煤',
    'age' : 17,
    'course' : 'UX'
  },
  {
    'name' : 'Carlos',
    'country': 'Chile',
    'age' : 31,
    'course' : 'Dise帽o'
  },
  {
    'name' : 'Ana Maria',
    'country': 'Colombia',
    'age' : 25,
    'course' : 'Tester'
  }
]
  • Ahora planteamos el primer problema a resolver, cuales son los estudiantes de Colombia y cuantos son:
countrie = list(filter(lambda country: country['country'] == 'Colombia', people))
print(countrie)
print(len(countrie))
_Produccion:_
[{'name': 'Pedro', 'country': 'Colombia', 'age': 18, 'course': 'developer'}, {'name': 'Ana Maria', 'country': 'Colombia', 'age': 25, 'course': 'Tester'}]
2

Ya sabemos que hay 2 personas en nuestros cursos que son de Colombia quienes son: Pedro y Ana Maria.

  • Ahora necesitamos saber quienes son considerados mayores de edad al tener 18 a帽os o m谩s.
adult = list(filter(lambda age: age['age'] >= 18, people))
print(adult)
print(len(adult))
_Produccin:_
[{'name': 'Pedro', 'country': 'Colombia', 'age': 18, 'course': 'developer'}, {'name': 'Carlos', 'country': 'Chile', 'age': 31, 'course': 'Dise帽o'}, {'name': 'Ana Maria', 'country': 'Colombia', 'age': 25, 'course': 'Tester'}]
3

Con esto podemos saber que hay 3 estudiantes que son considerados mayores de edad al tener 18 a帽os o m谩s quienes ser铆an: Pedro con 18 a帽os, carlos, con 31 a帽os y Ana Maria con 25 a帽os.

Dejo el c贸digo aqu铆 para un mejor acceso:

matches = [
  {
    'home_team': 'Bolivia',
    'away_team': 'Uruguay',
    'home_team_score': 3,
    'away_team_score': 1,
    'home_team_result': 'Win'
  },
  {
    'home_team': 'Brazil',
    'away_team': 'Mexico',
    'home_team_score': 1,
    'away_team_score': 1,
    'home_team_result': 'Draw'
  },
  {
    'home_team': 'Ecuador',
    'away_team': 'Venezuela',
    'home_team_score': 5,
    'away_team_score': 0,
    'home_team_result': 'Win'
  },
]

print(matches)
print(len(matches))

new_list = list(filter(lambda item: item['home_team_result'] == 'Win', matches))

print(new_list)
print(len(new_list))

print(matches)
print(len(matches))

me parecio curioso como se veria la misma formulacion pero con la funcion map, me retorna la lista con valores boolean

numbers = [1, 2, 3, 4, 5]
new_numbers = list(map(lambda x: x %2==0, numbers))

[False, True, False, True, False]

Soy de Venezuela y me resulta insultante que Ecuador nos haya ganado 5 a 0. 馃槫馃ぃ

Hay que tomar en cuenta que filter, map y reduce retornan generadores, no listas.
Por lo que a la hora de trabajar con ellas a veces conviene convertirlas, ya sea con:
list(filter(鈥))
o con [*filter(鈥)]

Algo a tener en cuenta, es que al usar usar filter, nos devolver谩 los mismos objetos que teniamos en nuestro iterable original, por lo tanto si se modifica un objeto filtrado afectar谩 a ambos iterables (el filtrado y el original)

Con dos condiciones:

saber si es de Per煤 y si es mayor de edad.

new_people = list(filter(lambda condic1 : condic1['country'] == 'Per煤' and condic1['age'] > 18, people))
print(new_people)
print(len(new_people))

Production:
[]
0

No existe persona que cumpla esos requisitos 馃槩.
Gracias Camilo Enrique Mejia me ayud贸 tu aporte.

La funci贸n filter() es una funci贸n integrada que se utiliza para filtrar una secuencia (como una lista o un diccionario) y retornar los elementos que cumplen con cierta condici贸n. La funci贸n filter() toma dos argumentos: una funci贸n que se utilizar谩 para evaluar cada elemento de la secuencia, y la secuencia que se va a filtrar.

  • La funci贸n que se utiliza con filter() debe tomar un elemento como entrada y retornar True o False seg煤n si el elemento debe ser incluido en el resultado filtrado. Los elementos que retornan True se incluyen en el resultado, mientras que los elementos que retornan False se excluyen.

Dejo algunos programas sencillos usando lambdas y filter.

"""
1. Filtrar n煤meros pares de una lista de enteros.
"""

lista = [1,2,3,4,5,6,7,8,9,10]
resultado = list(filter(lambda pares:pares%2==0,lista))
print(resultado)

"""
2. Filtrar n煤meros primos de una lista de enteros.
"""

def es_primo(numero):
    if numero <= 1:
        return False
    for i in range(2, int(numero ** 0.5) + 1):
        if numero % i == 0:
            return False
    return True

lista = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
resultado = list(filter(es_primo, lista))
print(resultado)

"""
3. Filtrar palabras que comienzan con una letra espec铆fica de una lista de palabras.
"""

lista = ["Mercurio", "Venus", "Tierra", "Marte", "Jupiter"]
resultado = list(filter(lambda palabra:(palabra.lower().startswith("m")),lista))
print(resultado)

"""
4. Filtrar nombres de una lista de nombres que tengan m谩s de cierta cantidad de letras.
"""

lista = ["Ana","Juan","Laura","Ramiro","Mario"]
resultado = list(filter(lambda palabra:len(palabra)>5,lista))
print(resultado)

"""
5. Filtrar elementos de una lista de strings que tienen una longitud impar.
"""

lista = ["Ana","Juan","Laura","Ramiro","Mario"]
resultado = list(filter(lambda palabra:len(palabra)%2!=0,lista))
print(resultado)

"""
6. Filtrar los elementos de una lista de diccionarios para obtener aquellos cuyo valor de la clave "edad" sea mayor que 30.
"""

lista = [ {
            'nombre' : 'Patricia',
            'edad': 28 
          },
          { 
            'nombre' : 'Marco',
            'edad': 32
          },
         { 
            'nombre' : 'Laura',
            'edad': 25
          },
         { 
            'nombre' : 'Ramiro',
            'edad': 46
          }
        ]


resultado = list(filter(lambda palabra:palabra['edad']>30,lista))
print(resultado)

"""
7. Filtrar los elementos de una lista de diccionarios para obtener aquellos que contienen una clave "categoria" con un valor espec铆fico.
"""

lista = [ {
            'pelicula' : 'saw',
            'genero': 'terror'
          },
          { 
            'pelicula' : 'one day',
            'genero': 'romance'
          },
         { 
            'pelicula' : 'hangover',
            'genero': 'comedia'
          },
         { 
            'pelicula' : 'mi vecino totoro',
            'genero': 'animada'
          }
        ]


resultado = list(filter(lambda pelicula:pelicula['genero']=="terror",lista))
print(resultado)

Mi aporte sin ver la lecci贸n鈥

matches = [
  {
    'home_team': 'Bolivia',
    'away_team': 'Uruguay',
    'home_team_score': 3,
    'away_team_score': 1,
    'home_team_result': 'Win'
  },
  {
    'home_team': 'Brazil',
    'away_team': 'Mexico',
    'home_team_score': 1,
    'away_team_score': 1,
    'home_team_result': 'Draw'
  },
  {
    'home_team': 'Ecuador',
    'away_team': 'Venezuela',
    'home_team_score': 5,
    'away_team_score': 0,
    'home_team_result': 'Win'
  },
]

print(matches)
print("-"*10)

no_draw_results_list = list(filter(lambda item: item['home_team_result'] != "Draw" , matches))
print(no_draw_results_list)

home_team_winner_list = list(filter(lambda item: item["home_team_result"] == "Win" , no_draw_results_list))
print(home_team_winner_list)

away_team_winner_list = list(filter(lambda item: item["home_team_result"] == "Lose" , no_draw_results_list))
print(away_team_winner_list)

home_team_winner = list(map(lambda item: item["home_team"], home_team_winner_list))
print(home_team_winner)

away_team_winner = list(map(lambda item: item["away_team"], away_team_winner_list))
print(away_team_winner)

La funci贸n filter devuelve un iterador donde los elementos se filtran a trav茅s de una funci贸n para probar si el elemento se acepta o no.

numbers = [1,2,3,4,5]
new_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(new_numbers)
print(numbers)

  • Python鈥檚 filter()es una funci贸n incorporada que le permite procesar un iterable y extraer aquellos elementos que satisfacen una condici贸n dada. Este proceso se conoce com煤nmente como una operaci贸n de filtrado .
  • Con filter(), puede aplicar una funci贸n de filtrado a un iterable y producir un iterable nuevo con los elementos que satisfacen la condici贸n en cuesti贸n. En Python, filter()es una de las herramientas que puedes usar para la programaci贸n funcional .

Aca les dejo una idea muy grafica de filter

El filter() es una funci贸n incorporada en Python que permite filtrar los elementos de un objeto iterable (como una lista, tupla o diccionario) bas谩ndose en una funci贸n que devuelve True o False.

La funci贸n filter() recibe dos argumentos:

La funci贸n: Esta es la funci贸n que testeamos en cada elemento del objeto iterable. Debe devolver True si el elemento se debe mantener, False si se debe descartar.
El iterable: El objeto iterable que queremos filtrar.
Por ejemplo:

python

Copy code

numeros = [1, 2, 3, 4, 5, 6]

def es_par(x):
return x % 2 == 0

pares = filter(es_par, numeros)

print(list(pares))
Esto filtrar铆a la lista de n煤meros para quedarse solo con los n煤meros pares, imprimiendo [2, 4, 6].

La funci贸n filter() devuelve un objeto filter, que es un iterable. Por eso debemos pasarlo a una lista para ver el resultado.

En resumen, filter() es una funci贸n de Python muy 煤til para filtrar elementos de una secuencia, dejando solo los que cumplen cierta condici贸n definida en una funci贸n

Excelente clase, todo bastante bien explicado y entendible.

numbers = [1,2,3,4,5,6,7,8,9,10]
pares = list(filter(lambda x: x % 2 ==0,numbers))
impares = list(filter(lambda x:x%2 != 0,numbers))
print(pares) 
print(impares)

Tambien podemos utilizar los marcadores y no depender del campo de result:

new_list_2 = list(filter(lambda item: item['home_team_score'] > item['away_team_score'], matches))

Algo muy interesante que se puede hacer con la funci贸n filter, es crear un algoritmo para crear una lista de n煤meros perfectos. Los n煤meros perfectos son aquellos cuyo valor es igual a la suma de sus divisores (p.e. Los divisores de 6 son 1, 2 y 3, y al sumarlos 1+2+3 = 6). Los 5 primeros n煤meros perfectos son [6, 28, 496, 8128, 550336]. Para este caso decid铆 configurar el algoritmo para mostrar los primeros 4 n煤meros perfectos, ya que al intentar hacer mas 550 mil iteraciones casi quemo mi CPU xD. Aqui les dejo mi aporte:

def is_perfect(n):
    divisors = list(filter(lambda i: n%i == 0, list(range(1,n))))
    sum = 0
    for i in divisors:
        sum += i
    if sum == n:
        return True
    else:
        return False

perfects = list(filter(is_perfect,list(range(1,8130))))
print(perfects)
output:
[6, 28, 496, 8128]

Filter es similar a utlizar un for para recorrer el array y un condicional para decidir cuales elementos cumplen la condicion y almacenarlos en un nuevo array. Bastante util para simplificar el codigo!

TIP: c贸mo saber d贸nde est谩 nuestro error:
El Shell de replit indica la l铆nea y pone una flechita en donde encontr贸 el error, en este caso observa que la flechita apunta antes de la funci贸n list:

Tambi茅n te dice en qu茅 n煤mero de l铆nea est谩 el error, line.
Y si vas al Editor, te subraya errores. Observa que tambi茅n empieza a subrayar en rojo al inicio de la funci贸n list:

En general, para depurar errores de Python, debemos comenzar de abajo hacia arriba. Lo digo porque a veces se apilan varios errores, pero el error m谩s cercano o directo ser谩 el de hasta abajo del Shell. En este ejemplo solo hubo un error.
Con esta info ya vamos m谩s encaminados a encontrarlo.
Falt贸 el = de asignaci贸n antes del list.
Espero sea 煤til, saludos. 馃槃

matches = [
  {
    'home_team': 'Bolivia',
    'away_team': 'Uruguay',
    'home_team_score': 3,
    'away_team_score': 1,
    'home_team_result': 'Win'
  },
  {
    'home_team': 'Brazil',
    'away_team': 'Mexico',
    'home_team_score': 1,
    'away_team_score': 1,
    'home_team_result': 'Draw'
  },
  {
    'home_team': 'Ecuador',
    'away_team': 'Venezuela',
    'home_team_score': 5,
    'away_team_score': 0,
    'home_team_result': 'Win'
  },
]
print(matches)
print(len(matches))

new_list = list(filter(lambda item: item['home_team_result'] == 'Win', matches))

print(new_list)
print(len(new_list))

print(matches)
print(len(matches))
esta bien saber eso, pero me parece que las list comprehension cumplen la misma funcion
# FILTER
# filter(function, iterable)
win_list = list(filter(lambda i: i['home_team_result'] == 'Win', matches))
print(win_list)
print(len(win_list)) # 2

# LIST COMPREHENSION
# [expression for item in iterable if condition]
win_list_2 = [i for i in matches if i['home_team_result'] == 'Win']
print(win_list_2)
print(len(win_list_2)) # 2
people = [
    {'name': 'Pedro'     , 'country': 'Colombia' , 'age': 18 , 'course': 'developer'},
    {'name': 'Juan'      , 'country': 'Per煤'     , 'age': 17 , 'course': 'UX'},
    {'name': 'Carlos'    , 'country': 'Chile'    , 'age': 31 , 'course': 'Dise帽o'},
    {'name': 'Ana Maria' , 'country': 'Colombia' , 'age': 25 , 'course': 'Tester'}
]

# Utilizando comprensi贸n de lista para filtrar estudiantes de Colombia
colombian_students = [person for person in people if person['country'] == 'Colombia']
adult_students     = [person for person in people if person['age']     >= 18]

# Imprime el resultado
print(colombian_students)
print(adult_students)

Es interesante la forma de usar nuestro codigo de python con el reduce para simplificar nuestros ejercicios. Eso nos ayuda a mejorar nuestra capacidad. Espero seguir mejorando con la parte de mas adelante.

matches = [
  {
    'home_team': 'Bolivia',
    'away_team': 'Uruguay',
    'home_team_score': 3,
    'away_team_score': 1,
    'home_team_result': 'Win'
  },
  {
    'home_team': 'Brazil',
    'away_team': 'Mexico',
    'home_team_score': 1,
    'away_team_score': 1,
    'home_team_result': 'Draw'
  },
  {
    'home_team': 'Ecuador',
    'away_team': 'Venezuela',
    'home_team_score': 5,
    'away_team_score': 0,
    'home_team_result': 'Win'
  },
]

winners = list(map(lambda x : x ["home_team_result"] == "Win", matches))
print(winners)
# Filter

# https://www.w3schools.com/python/ref_func_filter.asp


numbers = [1,2,3,4,5]
new_numbers = list(filter(lambda x: x % 2 == 0, numbers)) # Se escribe la condici贸n del filter (x % 2 == 0)
print(new_numbers) # Se imprimen solo los que cumplen con la condici贸n
print(numbers)
# Filter en un diccionario

matches = [
  {
    'home_team': 'Bolivia',
    'away_team': 'Uruguay',
    'home_team_score': 3,
    'away_team_score': 1,
    'home_team_result': 'Win'
  },
  {
    'home_team': 'Brazil',
    'away_team': 'Mexico',
    'home_team_score': 1,
    'away_team_score': 1,
    'home_team_result': 'Draw'
  },
  {
    'home_team': 'Ecuador',
    'away_team': 'Venezuela',
    'home_team_score': 5,
    'away_team_score': 0,
    'home_team_result': 'Win'
  },
]

print(matches)
print(len(matches))

new_list = list(filter(lambda item: item['home_team_result'] == 'Win', matches)) # Se hace el filtro de los elementos

print(new_list)
print(len(new_list))

print(matches)
print(len(matches))
En los recursos no aparece nada

Les comparto la forma que utilic茅 para poder resolver el ejericio, usando dictionary comprehensions, una funci贸n normal y la funci贸n filter con condicionales!

# 1. Dict comprenhensions:
def filtro(matches):
  return [match['home_team'] for match in matches if match['home_team_result'] == 'Win']

# 2. Funci贸n de toda la vida
def filtro2(matches):
  result = []
  for x in matches:
    if x['home_team_result'] == 'Win':
      result.append(x['home_team'])
  return list(result)


# 3. Filtrando con filter y trayendo todos los datos del dict
result = list(filter(lambda x: x['home_team'] if x['home_team_result'] == 'Win' else None , matches ))

print(filtro(matches))
print(filtro2(matches))
print(result)
print(matches)
la secci贸n de recursos esta vac铆a

numeros = [1,2,3,4,5]
nuevos_numeros = list(filter( lambda x: x % 2 == 0 , numeros))
print (numeros)
print (nuevos_numeros)

matches = [
{
鈥榟ome_team鈥: 鈥楤olivia鈥,
鈥榓way_team鈥: 鈥楿ruguay鈥,
鈥榟ome_team_score鈥: 3,
鈥榓way_team_score鈥: 1,
鈥榟ome_team_result鈥: 鈥榃in鈥
},
{
鈥榟ome_team鈥: 鈥楤razil鈥,
鈥榓way_team鈥: 鈥楳exico鈥,
鈥榟ome_team_score鈥: 1,
鈥榓way_team_score鈥: 1,
鈥榟ome_team_result鈥: 鈥楧raw鈥
},
{
鈥榟ome_team鈥: 鈥楨cuador鈥,
鈥榓way_team鈥: 鈥榁enezuela鈥,
鈥榟ome_team_score鈥: 5,
鈥榓way_team_score鈥: 0,
鈥榟ome_team_result鈥: 鈥榃in鈥
},
]

print(matches)

cantidad de elementos

print(len(matches))

new_list = list(filter(lambda item: item[鈥榟ome_team_result鈥橾 == 鈥榃in鈥, matches))

print(new_list)
print(len(new_list))

print(matches)
print(len(matches))

Por si preguntaban cual ser铆a el c贸digo para calcular una lista de solo el nombre de los ganadores

print('---winners---')
winners=[]
for i in range(0,int(len(new_list))):
  winners.append(new_list[i]['home_team'])
print(winners)

Les comparto una funcion que hice para facilitar la parte visual de los resultados en la consola

def printDic(data):
    for dic in data:
        print('{')
        for key, value in dic.items():
            print(' ', key, ":", value)
        print("}")

#print(matches)
printDic(matches)

Antes de iniciar la clase hice un c贸digo con lambda para entender f谩cilmente la funci贸n filter():

numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numero = list(filter(lambda numero: numero % 2 == 0, numeros))
print(numero)

Dejo aqui un ejemplo con un def normal 馃弮鈥嶁檧锔

# Definimos una funci贸n para verificar si un n煤mero es par
def es_par(numero):
    return numero % 2 == 0

# Creamos una lista de n煤meros
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Filtramos los n煤meros pares utilizando filter() y la funci贸n es_par
numeros_pares = list(filter(es_par, numeros))

# Imprimimos los n煤meros pares
print(numeros_pares)

Super empezamos primeros pasos de bases de datos 馃惂


matches = [
  {
    'home_team': 'Bolivia',
    'away_team': 'Uruguay',
    'home_team_score': 3,
    'away_team_score': 1,
    'home_team_result': 'Win'
  },
  {
    'home_team': 'Brazil',
    'away_team': 'Mexico',
    'home_team_score': 1,
    'away_team_score': 1,
    'home_team_result': 'Draw'
  },
  {
    'home_team': 'Ecuador',
    'away_team': 'Venezuela',
    'home_team_score': 5,
    'away_team_score': 0,
    'home_team_result': 'Win'
  },
]

print(matches)
print('partidos =>', len(matches))
print('''
''')
#Filtramos solo los partidos locales ganadores (FILTER)
win_matches = list(filter(lambda item: item['home_team_result'] == 'Win', matches))
#transformamos los datos de esos partidos para mostrar los paises (MAP)
win_countries = list(map(lambda item: item['home_team'], win_matches))

print('win local countries =>', win_countries)
print(win_matches) #no se modific贸 win_countries porque no fue una inserci贸n, solo retorna valores y los devuelve en una nueva lista de items.

Para esta clase escrib铆 una lista de n煤meros del -20 al 20 generados aleatoriamente y apliqu茅 un filtro para obtener los n煤meros que fueran menores que -10 o mayores que 10.

import random

elementos = 10
nunbers = [random.randint(-20,20) for i in range(0,elementos)]
print(nunbers)
filter_numbers = list(filter(lambda i: - 10 > i or i > 10, nunbers))
print(filter_numbers)

Genial el uso del filter. Lo apliqu茅 en los dataframe y la sintaxis del c贸digo queda mucho mejor que usar Python base para el filtrado.

Aporte de mis apuntes por si gustan:

matches = [
  {
    'home_team': 'Argentina', #equipo local
    'away_team': 'Uruguay',   #equipo visitante
    'home_team_score': 3,     #goles
    'away_team_score': 1,     #goles
    'home_team_result': 'win' #marcador 
  },
  {
    'home_team': 'Brazil',     #equipo local
    'away_team': 'Mexico',     #equipo visitante
    'home_team_score': 1,      #goles
    'away_team_score': 1,      #goles
    'home_team_result': 'Draw' #marcador 
  },
  {
    'home_team': 'Chile',     #equipo local
    'away_team': 'Colombia',  #equipo visitante
    'home_team_score': 2,     #goles
    'away_team_score': 3,     #goles
    'home_team_result': 'win' #marcador 
  },
]

print(matches) # imprimimos nuestro diccionario
print(len(matches)) # imprimimos la cantidad

# creamos una nueva lista
# preguntamos por un elemento del diccionario
# le enviamos un mensaje al diccionario lo que queremos
new_list = list(filter(lambda item: item['home_team_result'] == 'Win', matches))

print(new_list) # imprimimos la nueva lista
print(len(new_list)) # imprimimos la cantidad
matches = [
  {
    'home_team': 'Bolivia',
    'away_team': 'Uruguay',
    'home_team_score': 3,
    'away_team_score': 1,
    'home_team_result': 'Win'
  },
  {
    'home_team': 'Brazil',
    'away_team': 'Mexico',
    'home_team_score': 1,
    'away_team_score': 1,
    'home_team_result': 'Draw'
  },
  {
    'home_team': 'Ecuador',
    'away_team': 'Venezuela',
    'home_team_score': 5,
    'away_team_score': 0,
    'home_team_result': 'Win'
  },
]

print(matches)
print(len(matches))

new_list = list(filter(lambda item: item['home_team_result'] == 'Win', matches))

print(new_list)
print(len(new_list))

print(matches)
print(len(matches))

Quise mirar c贸mo obtener una lista con los nombres de los equipos que ganaron partidos como local y se me ocurri贸 esto:

  1. Crear un filtro que elija los partidos ganados por el equipo local.
filtro = filter(lambda item : item['home_team_result'] == 'Win', matches)
  1. Usar ese filtro como iterable en un map que retorne el nombre del equipo local ganador
print(list(map(lambda team : team['home_team'], filtro)))

Este es el resultado:

['Bolivia', 'Ecuador']

De igual manera, todo se puede expresar en una sola l铆nea as铆:

print(list(map(lambda team : team['home_team'], filter(lambda item : item['home_team_result'] == 'Win', matches))))

Apliqu茅 un poco m谩s de lo que ya hemos visto en el curso:

# Librerias
import os
import random

#Funcion para limpiar pantalla
def clean_screen():
    os.system("cls")

clean_screen()

matches = [
  {
    'home_team': 'bolivia',
    'away_team': 'uruguay',
    'home_team_score': 3,
    'away_team_score': 1,
    'home_team_result': 'win'
  },
  {
    'home_team': 'brazil',
    'away_team': 'mexico',
    'home_team_score': 1,
    'away_team_score': 1,
    'home_team_result': 'draw'
  },
  {
    'home_team': 'ecuador',
    'away_team': 'venezuela',
    'home_team_score': 5,
    'away_team_score': 0,
    'home_team_result': 'win'
  },
]

#print(matches)
#print(len(matches))


# Opciones de inicio
print("Opciones: \n" "\nhome_team: Bolivia, Brazil, Ecuador \n" "\naway_team: Uruguay, Mexico, Venezuela \n" "\nhome_team_result: Win, Draw \n") 

# ingresa la clave del diccionario a filtrar

while True:
    key = input("Ingrese la clave del diccionario a filtrar: ").lower()
    if any(key in item for item in matches):
        break
    else:
        print(f"Por favor ingresa una clave v谩lida para {key}")

# ingresa el valor del diccionario a filtrar
while True:
    value = input("Ingrese el valor del diccionario a filtrar: ").lower()
    if any(value in item[key] for item in matches):
        break
    else:
        print(f"Por favor ingresa un valor v谩lido para {key}")

new_list = list(filter(lambda item: item[key] == value, matches))

print(new_list)
print(len(new_list))

print(matches)
print(len(matches))

Filter

# Filter
# https://www.w3schools.com/python/ref_func_filter.asp

numbers = [1, 2, 3, 4, 5]

# Solo los elementos que cumplen con la condicion del filter, van a ser parte de la nueva lista
new_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(new_numbers)

# Filter no modifica la lista original, simplemente crea una nueva lista.
print(numbers)

Filter con Diccionarios

# Filter con Diccionarios
# https://www.w3schools.com/python/ref_func_filter.asp

# Lista con diccionarios dentro
matches = [
  {
    'home_team': 'Bolivia',
    'away_team': 'Uruguay',
    'home_team_score': 3,
    'away_team_score': 1,
    'home_team_result': 'Win'
  },
  {
    'home_team': 'Brazil',
    'away_team': 'Mexico',
    'home_team_score': 1,
    'away_team_score': 1,
    'home_team_result': 'Draw'
  },
  {
    'home_team': 'Ecuador',
    'away_team': 'Venezuela',
    'home_team_score': 5,
    'away_team_score': 0,
    'home_team_result': 'Win'
  },
]

print(matches)
print(len(matches))

# Genera una nueva lista de los partidos ganados
new_list = list(filter(lambda item: item['home_team_result'] == 'Win', matches))

print(new_list)
print(len(new_list))

print(matches)
print(len(matches))
for e in matches:
    if e["home_team_result"] == "Win":
        print(list(e))
    else:
        pass

En este ejemplo, ponemos una lista de productos que se compraron y vamos a saber cuales productos tienen un precio menor a 3000. El c贸digo es el siguiente:

products = [{
  "cantidad": 2,
  "precio": 1043,
  "producto": "Bolsa Blanca 55 X 55"
}, {
  "cantidad": 1,
  "precio": 2535,
  "producto": "Jabon en polvo"
}, {
  "cantidad": 2,
  "precio": 6608,
  "producto": "Papel Higi茅nico "
}, {
  "cantidad": 2,
  "precio": 7901,
  "producto": "Toallas de manos"
}]

economicos = list(filter(lambda x: x["precio"] <= 3000, products))
print(economicos)

se siente un poco rarito ejecutar primero el metodo y dentro de ello, la lista a recorrer, deferente a javascript por ejemplo, donde se aplica de una forma 鈥渕as directa鈥 por decirlo sobre la lista a iterar.

Algo que me gusta mucho de las lambda, es la capacidad de guardar su l贸gica en una variable, y llamarla dentro del map/filter鈥 que estemos usando

from typing import Callable

filter_even: Callable[[int], bool] = lambda x: x % 2 == 0
numbers = [1, 2, 3, 4, 5]
new_numbers = list(filter(filter_even, numbers))

Creo que mejora la legibilidad y nos da la posibilidad de reutilizar el c贸digo

consegu铆 el mismo resultado usando list comprehensions

lista = list(filter(lambda x: x % 2 == 0, numbers))

lista1 = [i for i in numbers if i % 2 == 0]

print(lista)
print(lista1)
lista = list(filter(lambda x: x['home_team_result'] == 'Draw', matches))

lista1 = [i for i in matches if i['home_team_result'] == 'Draw']

print(lista)
print(lista1)

Filter

Util para filtrar elementos de una lista. Filter no modifica el estado original del diccionario

Filter sobre listas

#-----------Filter--------------

# nueva lista con numeros pares
numbers = [1,2,3,4,5]
new_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(new_numbers)
--> [2, 4]

Filter sobre diccionarios

#------- Filter con diccionarios ----------

matches = [
  {
    'home_team': 'Bolivia',
    'away_team': 'Uruguay',
    'home_team_score': 3,
    'away_team_score': 1,
    'home_team_result': 'Win'
  },
  {
    'home_team': 'Brazil',
    'away_team': 'Mexico',
    'home_team_score': 1,
    'away_team_score': 1,
    'home_team_result': 'Draw'
  },
  {
    'home_team': 'Ecuador',
    'away_team': 'Venezuela',
    'home_team_score': 5,
    'away_team_score': 0,
    'home_team_result': 'Win'
  },
]

# obtener una lista con los diccionarios de los equipo locales que hayan ganado
print(matches)
print(len(matches))
--> 3
		[{'home_team': 'Bolivia', 'away_team': 'Uruguay', 'home_team_score': 3, 'away_team_score': 1, 'home_team_result': 'Win'}, 
		 {'home_team': 'Brazil', 'away_team': 'Mexico', 'home_team_score': 1, 'away_team_score': 1, 'home_team_result': 'Draw'}, 
		 {'home_team': 'Ecuador', 'away_team': 'Venezuela', 'home_team_score': 5, 'away_team_score': 0, 'home_team_result': 'Win'}]

new_list = list(filter(lambda item: item['home_team_result'] == 'Win', matches))

print(len(new_list))
print(new_list)
--> 2
		[{'home_team': 'Bolivia', 'away_team': 'Uruguay', 'home_team_score': 3, 'away_team_score': 1, 'home_team_result': 'Win'}, 
		 {'home_team': 'Ecuador', 'away_team': 'Venezuela', 'home_team_score': 5, 'away_team_score': 0, 'home_team_result': 'Win'}]

Genial forma de utilizar filter!