Filtra mensajes de un user específico
Clase 26 de 56 • 21 Días de Python
Contenido del curso
Clase 26 de 56 • 21 Días de Python
Contenido del curso
Paola Alapizco
iecgerman .
iecgerman .
José Miguel Reyes
Juan Diego
Sebastián Alejandro Arce García
Emmanuel Paiva
Omar Cuarenta
Omar Cuarenta
Francisco Pin
Manuel Gomez
Angel Carballeira
Harold Edward Rodriguez Navarro
Harold Edward Rodriguez Navarro
Diego Paredes Piñón
Fabricio González Guasque
Alejandro Anaya
Waldir Zapata Garcia
Waldir Zapata Garcia
Didier Fernando Aragón Moreno
Gabriel Mauricio Estupiñan Parada
Luis Kennedy Saavedra Fuentes
Mi solución :computer: :snake:
Para este ejercicio decidí resolverlo de dos formas, ambas con la función filter y con lambda la diferencia entre ambas soluciones es como implementé la función lambda.
.
.
.
Forma #1
Creando la función anónima directamente en el primer parámetro de la función filter
def filter_user_messages(messages, user): filtered = list(filter(lambda msg: msg["sender"].upper() == user.upper(), messages)) return filtered
Forma #2
Las funciones lambda al ser anónimas pueden asignarse a una variable y esa variable utilizarla como una función tal cual. Así que para la 2da forma asigne la función de filtrado a una variable llamada filter_by_user y esa "variable" (que en realidad es una función) la pase en el primer parámetro de filter.
def filter_user_messages(messages, user): filter_by_user = lambda msg: msg["sender"].upper() == user.upper() filtered = list(filter(filter_by_user, messages)) return filtered
📢NOTA: filter recibe dos parámetros, la función que realiza el filtrado y la lista de los elementos que se van a filtrar. Es importante notar que al mandar el parámetro filter_by_user va sin paréntesis () por que nosotros no estamos ejecutando la función, sino que filter internamente lo hace, a esto se le llama higher order functions y se describen en la lectura que sigue.
después de repasar muchas veces las clases de maps, filter, hof, etc ya por fin entendí 😁
def filtrar_mensajes_usuario(mensajes, usuario): # tambien puede ir list() antes de filter() filtrado_mensajes = filter(lambda mensaje: mensaje['sender'] == usuario, mensajes) # aquí el orden importa, si pongo primero mensajes y despues usuario me marca error return list(filtrado_mensajes) # ojo al no poner list si no nos imprime un iterable <filter object at 0x7fb787657790> respuesta = filtrar_mensajes_usuario([ {'sender': 'Alice', 'content': 'Hola, ¿cómo estás?'}, {'sender': 'Alice', 'content': '¿Quieres tomar un café?'}, {'sender': 'Alice', 'content': 'Nos vemos luego.'} ], usuario = 'Alice') # ojo con la coma antes de usuario # podemos tambien quitar usuario y dejar solo 'Alice' tambien podemos usar upper() por si recibimos mayusculas como lo hizo Paola Camacho Alpiztle print(respuesta)
Mi código:
def filter_user_messages(messages, user): return list(filter(lambda message: message['sender'] == user, messages))
def filter_user_messages(messages, user): # Tu código aquí 👈 return list(filter(lambda i: i['sender']==user, messages)) ```def filter\_user\_messages(messages, user): # Tu código aquí 👈 return list(filter(lambda i: i\['sender']==user, messages))
Hola a todos, comparto mi solución
def filter_user_messages(messages, user): filtro = list(filter(lambda dicc: dicc['sender'] == user, messages)) return filtro ```def filter\_user\_messages(messages, user): filtro = list(filter(lambda dicc: dicc\['sender'] == user, messages)) return filtro
Mi solución:
def filter_user_messages(messages, user): # Tu código aquí 👈 return list(filter(lambda messages: messages['sender'] == user, messages))
def filter_user_messages(messages, user): pares = list(filter(lambda x: x["sender"] == user, messages)) return(pares)
def filter_user_messages(messages, user): # Tu código aquí 👈 return [m for m in messages if m['sender'] == user] pass ```def filter\_user\_messages(messages, user): # Tu código aquí 👈 return \[m for m in messages if m\['sender'] == user] pass
messages = [ {'sender': 'Alice', 'content': 'Hola, ¿cómo estás?'}, {'sender': 'Bob', 'content': '¡Bien, gracias!'}, {'sender': 'Alice', 'content': '¿Quieres tomar un café?'}, {'sender': 'Charlie', 'content': 'Hola a todos.'}, {'sender': 'Alice', 'content': 'Nos vemos luego.'}] user = 'Alice' def filter_user_messages(messages, user): filter_message = list(filter(lambda x: x['sender'] == user , messages)) return filter_message print(filter_user_messages(messages, user))
def filter_user_messages(messages, user): user_messages = [] user_messages = list(filter(lambda message: message["sender"] == user, messages)) return user_messages # if user_messages else []
Hice tres soluciones para este problema, la primera de ellas es como las instrucciones indicaros, utilicé las funciones lambda en conjunto con la función.
Utilizando lambda:
filter_user_messages = lambda messages, user: list(filter(lambda messages: user == messages['sender'], messages ))
La segunda forma lo hice utilizando funciones normales junto con list comprehension:
Con función normal y list comprehension:
def filter_user_messages(messages, user): return [message for message in messages if message['sender'] == user]
y finalmente combine las funciones lambda junto con list comprehension
filter_user_messages = lambda messages, user: [message for message in messages if message['sender'] == user]
¿Qué forma les gustó más? ¡espero sus comentarios!
Después de diversas pruebas llegué a los distintos resultados en tiempos de ejecución para cada una de las funciones anteriores, con un total de 5mil mensajes por filtrar y 10mil veces por correr cada una de ellas obtuve los siguientes tiempos.
función_a: Utilizando filter y lambda
función_b: Utilizando list comprehension y funciones normales
función_c: utilizando list comprehension y lambda
<code> # Para entender el código de filter(), repasa este for msg in messages: if msg['sender'] == user: print(msg)
<code> def filter_user_messages(messages, user): return list(filter(lambda message: message['sender'] == user, messages)) user = 'Alice' res = filter_user_messages(messages, user) print(res)
messages = [ {'sender': 'Alice', 'content': 'Hola, ¿cómo estás?'}, {'sender': 'Bob', 'content': '¡Bien, gracias!'}, {'sender': 'Alice', 'content': '¿Quieres tomar un café?'}, {'sender': 'Charlie', 'content': 'Hola a todos.'}, {'sender': 'Alice', 'content': 'Nos vemos luego.'} ] user = 'Bob' def filter_user_messages(messages, user): # Tu código aquí 👈 mensajes = list(filter(lambda x: x["sender"] == user, messages)) print(mensajes) if __name__ == "__main__": filter_user_messages(messages,user)
🛡️🛡️Escudo anti-spoilers🛡️🛡️
Mi solución al reto:
def filter_user_messages(messages, user): return list(filter(lambda m: m['sender'] == user , messages))
solution
def filter_user_messages(messages, user): resultdict=[] resultdict = list(filter(lambda message: message["sender"] == user, messages)) #print(resultdict) return(resultdict) if __name__ == '__main__': messages = [ {'sender': 'Alice', 'content': 'Hola, ¿cómo estás?'}, {'sender': 'Bob', 'content': '¡Bien, gracias!'}, {'sender': 'Alice', 'content': '¿Quieres tomar un café?'}, {'sender': 'Charlie', 'content': 'Hola a todos.'}, {'sender': 'Alice', 'content': 'Nos vemos luego.'} ] user = 'Alice' response = filter_user_messages(messages, user) print(response)
def filter_user_messages(messages, user): # Tu código aquí 👈 new_messages = [] for message in messages: #print(message) if message['sender'] == user: #print(message) new_messages.append(message) return new_messages messages = [ {'sender': 'Alice', 'content': 'Hola, ¿cómo estás?'}, {'sender': 'Bob', 'content': '¡Bien, gracias!'}, {'sender': 'Alice', 'content': '¿Quieres tomar un café?'}, {'sender': 'Charlie', 'content': 'Hola a todos.'}, {'sender': 'Alice', 'content': 'Nos vemos luego.'} ] user = 'Alice' response = filter_user_messages(messages, user) print(response)
Esta es mi solución . . . . . . . . . . . . . . . .
def filter_user_messages(messages, user): return list(filter(lambda message: message["sender"] == user, messages))
""" Function lambda with filter function for filter messages from a specific user """ def filter_user_messages(messages, user): """Function to filter messages by user""" return list(filter(lambda message: message["sender"] == user,messages)) if __name__ == '__main__': """Start Function""" messages = [ {'sender': 'Alice', 'content': 'Hola, ¿cómo estás?'}, {'sender': 'Bob', 'content': '¡Bien, gracias!'}, {'sender': 'Alice', 'content': '¿Quieres tomar un café?'}, {'sender': 'Charlie', 'content': 'Hola a todos.'}, {'sender': 'Alice', 'content': 'Nos vemos luego.'} ] user = 'Alice' print(filter_user_messages(messages, user))