es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Lista única con objetos.

Tengo una lista simple:

simple_list = [
SimpleObject(name = faker.name(), city = faker.city())
for i in range(0, 10)
]

Esto me da, por ejemplo:

simple_list = [
SimpleObject(name ="aaa", city ="Londres"),
SimpleObject(name ="bbb", city ="Madrid"),
SimpleObject(name ="ccc", city ="París"),
SimpleObject(name ="ddd", city ="Madrid"),
]

¿Cómo asegurar la unicidad de esta lista usando la clave de ciudad? En mi ejemplo, me gustaría recibir:

simple_list = [
SimpleObject(name ="aaa", city ="Londres"),
SimpleObject(name ="bbb", city ="Madrid"),
SimpleObject(name ="ccc", city ="París"),
]

o

simple_list = [
SimpleObject(name ="aaa", city ="Londres"),
SimpleObject(name ="ccc", city ="París"),
SimpleObject(name ="ddd", city ="Madrid"),
]

No me importa cuál, es importante que las ciudades no se repitan.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para asegurarnos de que la simple_list tenga unicidad usando la clave city, podemos utilizar un set y un bucle while. Aquí hay una posible solución:

    simple_list = []
    city_set = set()  # para realizar un seguimiento de las ciudades únicas
    
    while len(simple_list) < 10:
        name = faker.name()
        city = faker.city()
    
        if city not in city_set:  # si la ciudad es única
            simple_obj = SimpleObject(name=name, city=city)
            simple_list.append(simple_obj)
            city_set.add(city)  # agregar la ciudad al set
    
    

    Este código seguirá generando instancias de SimpleObject hasta que tengamos 10 ciudades únicas en la lista simple_list. Tenga en cuenta que utilizamos un set para almacenar las ciudades únicas y comprobamos si una ciudad generada ya estaba en el set antes de agregar un nuevo SimpleObject a la lista.

    Después de ejecutar este código, simple_list contendrá 10 SimpleObjects con ciudades únicas.

Comments are closed.