Python - Búsqueda en lista de diccionaros por valor

 
Vista:

Búsqueda en lista de diccionaros por valor

Publicado por Pepin33 (1 intervención) el 28/09/2012 11:45:55
¡Saludos a todos!

Me gustaría saber cual es la manera correcta de realizar una búsqueda por valor en una lista de diccionarios de Python.

Pongo un ejemplo: Un diccionario como éste:

lista = [ {'Nombre': 'Juan', 'Edad': 21}, {'Nombre':'Pedro', 'Edad': 40}, {'Nombre':'Paula', 'Edad':28} ]

Si yo ahora quiero saber si hay alguna persona que tenga 40 años... ¿tengo que recorrerme toda la lista?.

Sé que lo puedo hacer así:

1
2
3
for persona in lista:
  if persona['Edad']==40:
    print ('Sí que hay')

Pero... ¿no hay una forma más eficiente de hacerlo? (la lista puede tener 100.000 entradas).
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 2.239
Plata
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Búsqueda en lista de diccionaros por valor

Publicado por xve (1646 intervenciones) el 28/09/2012 16:11:36
Hola Pepin, yo lo aria así:

result=any(e['Edad']==40 for e in lista)

Poro de alguna manera recorre la lista... aunque nunca lo he probado con 100.000 valores.

Espero que te sirva
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Búsqueda en lista de diccionaros por valor

Publicado por Pepin33 (1 intervención) el 28/09/2012 17:24:41
Gracias por la respuesta, xve.

Aunque tienes razón, se sigue recorriendo la lista completa. Aún así, queda más "elegante" como tu lo has planteado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Búsqueda en lista de diccionaros por valor

Publicado por Evys Ancede (16 intervenciones) el 17/10/2012 21:55:34
Pensando algoritmicamente si en un conjunto de lapices quieres saber cual tiene la punta partida, necesariamente tienes que mirar todos los lapices. Aunque uses una función que te devuelva los valores de los diccionarios, esta internamente recorrera todo el objeto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Búsqueda en lista de diccionaros por valor

Publicado por Lazaro (2 intervenciones) el 30/09/2012 19:57:41
Saludos y muy buen dia.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
### codigo
lista = [ {'Nombre': 'Juan', 'Edad': 21}, {'Nombre':'Pedro', 'Edad': 40}, {'Nombre':'Paula', 'Edad':28} ]
 
def primera_variante():
    return any(e['Edad']==40 for e in lista)
 
def segunda_variante():
    return True in [e['Edad']==40 for e in lista]
 
def tercera_variante():
    for persona in lista:
        if persona['Edad']==40:
            return True
    return False
 
def cuarta_variante():
    return [e['Nombre'] for e in lista if e['Edad']==40]
 
print primera_variante()
print segunda_variante()
print tercera_variante()
print cuarta_variante()
 
if __name__ == '__main__':
    ## 
    from timeit import Timer
    ##
    t = Timer("primera_variante()", "from __main__ import primera_variante")
    print "primera_variante() = ", t.timeit()
    ##
    t = Timer("segunda_variante()", "from __main__ import segunda_variante")
    print "segunda_variante() = ", t.timeit()
    ##
    t = Timer("tercera_variante()", "from __main__ import tercera_variante")
    print "tercera_variante() = ",t.timeit()
    ##
    t = Timer("cuarta_variante()", "from __main__ import cuarta_variante")
    print "cuarta_variante()  = ",t.timeit()
##Fin del codigo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar