Hola estoy trabajando sobre el tema listas de lista en pascal. el ejercicio dice Twitter dispone de una lista con los tweets realizados durante los últimos 5 segundos.
De cada tweet se conoce: el código y nombre de usuario que lo generó, el contenido del mensaje y si el mismo es o no un retweet. la lista esta ordenada donde los tweets de cada usuario aparezcan de manera consecutiva.
lo que me pide es : generar una nueva estructura donde se puedan “agrupar” los tweets de manera tal que los datos del usuario no se encuentren repetidos.
o sea una lista de otra lista, la verdad no se como empezar, agradezco la ayuda
¿ Que no se repitan los datos del usuario que publicó? Si solo está el username poco se puede hacer.
No te ha dado ningún orden de complejidad máximo para realizar el ejercicio?
Inserto en una lista nueva si no está duplicado, fin.
Entiendo que serían listas anidadas, en las que el primer nivel es el codigo + username y el segundo nivel es el content + isRetweet.
Vaya, en mi cabeza al menos lo veo muy fácil, pero quizá no estoy interpretando bien el enunciado.
#5 si seria algo asi, pero no entiendo muy bien como hacerlo y añadir los twits de la lista ya dada, a la nueva lista
#6 Y un simple diccionario clave valor, donde la clave sea el usuario y el "valor" el listado de tweets de ese usuario?
Recorres la lista original, si el usuario no está en el diccionario lo añades junto al primero de los tweets como elemento inicial de la lista "valor" o "tweets" o como lo quieras llamar, si ya está el usuario en el diccionario, agregas un nuevo elemento a la lista de tweets de ese user
#7 claro el pero tengo muchos usuarios disntintos, y tendrias que hacer una lista por cada usuario
Yo lo veo también así.
Tienes la lista principal, entonces recorres esta lista y comienzas otra nueva lista, que contenga un objeto de tipo: { id, usuario, lista de tweets = { contenido, retweet } }
Por cada registro de la primera, compruebas si ya existe el id de ese que estas iterando. Si no existe, añades uno nuevo, si no, añades el tweet en la lista del id x.
Yo creo que el ejercicio te pide que simplemente mires si el tweet actual tiene el mismo username que el anterior que has procesado. Lo de si es retweet si solo cuentas con un flag diciendo si lo es o no no veo como aplica a este ejercicio más que para meter ruido.
Es decir, si la lista de tweets es algo tipo (obviando el codigo y isRetweet, ya que el enunciado solo habla de evitar repetir usernames)
[
{
"username": "user1",
"message": "hello there!"
},
{
"username": "user1",
"message": "I'm using Twitter"
},
{
"username": "user2",
"message": "I'm using Twitter too!"
}
]
Generes algo tipo
[
{
"username": "user1",
"tweets": [{"message": "hello there!"}, {"message": "I'm using Twitter"}]
},
{
"username": "user2",
"tweets": [{"message": "I'm using Twitter too!"}]
}
]
Al estar la lista ordenada por usuario con hacer algo tipo
grouped_tweets = []
last_username = None
for tweet in tweets:
current_username = tweet.get("username")
if current_username != last_usename:
grouped_tweets.append({"username": current_username, "tweets": []})
last_username = current_username
grouped_tweets[-1].get("messages").append({"message": tweet.get("message")})
Debería funcionarte. Si el enunciado no da más ejemplos o detalles sobre qué hacer con el is_retweet diría que te están pidiendo eso.
En esencia es un poco una iteración del típico ejercicio de contar cuántos números distintos hay en una lista ordenada, con guardarte el anterior y contar cuántas veces este es diferente al actual ya lo tienes.