Tengo una lista llamada clients_list llena de diccionarios como este:

    clients_list =
    [
            {'John Guy': [28, '03171992', 'Student']},
            {'Bobby Jones': [22, '02181982', 'Student']},
            {'Claire Eubanks': [18, '06291998', 'Student']},
    ]

¿Cómo verificaría si alguien estaba en esta lista usando la respuesta de entrada? He probado el código

elif answer in clients_list:
    print(f'{answer} is in our database.')

Pero no parece funcionar correctamente.

2
BoopityBoppity 28 feb. 2018 a las 12:11

6 respuestas

La mejor respuesta

Prueba esto

clients_list = [{'John Guy': [28, '03171992', 'Student']},
            {'Bobby Jones': [22, '02181982', 'Student']},
            {'Claire Eubanks': [18, '06291998', 'Student']}]

c= 'John Guy'

for item in clients_list:
    if c in item:
        print c + 'is in our database.'
        break
2
khelili miliana 28 feb. 2018 a las 09:38

Supongamos que answer contiene "John Guy". Entonces esta prueba if answer in clients_list pregunta si la cadena "John Guy" está en la lista de diccionarios, lo que por supuesto no lo está, porque clients_list es una lista de diccionarios, no cadenas. ¿Ahora ves por qué tu prueba no hace lo que esperas?

Esto demuestra el punto de juanpa.arrivilaga de que la estructura de datos realmente no coincide con lo que está haciendo con ella. Si desea realizar búsquedas en los nombres, esos nombres deben ser claves de diccionario. Algo como

clients_list = {
        'John Guy': [28, '03171992', 'Student'],
        'Bobby Jones': [22, '02181982', 'Student'],
        'Claire Eubanks': [18, '06291998', 'Student'],
        }

También puede considerar hacer los valores del diccionario llamados tuplas en lugar de listas.

1
BoarGules 28 feb. 2018 a las 09:38

Comas entre los elementos de la lista.

clients_list =[{'John Guy': [28, '03171992', 'Student']},
            {'Bobby Jones': [22, '02181982', 'Student']},
            {'Claire Eubanks': [18, '06291998', 'Student']}]

En cuanto al problema, esto debería funcionar

for d in clients_list:
    for person in d.items():
        if "John Guy" in person[0]:
            print (person[1])
            print (person[0]+" is in our database")
0
Arunabh 28 feb. 2018 a las 09:29

Si desea hacer coincidir las teclas, puede usar set().union:

clients_list = [{'John Guy': [28, '03171992', 'Student']},
                {'Bobby Jones': [22, '02181982', 'Student']},
                {'Claire Eubanks': [18, '06291998', 'Student']}]

x = input('Enter a name:')

if x in set().union(*clients_list):
    print('Name found')
else:
    print('Name not found')
0
jpp 28 feb. 2018 a las 09:32

Puedes intentar hacerlo usando la función zip:

clients_list = [{'John Guy': [28, '03171992', 'Student']}, {'Bobby Jones': [22, '02181982', 'Student']}, {'Claire Eubanks': [18, '06291998', 'Student']}]

name = "John Guy"
if name in list(zip(*clients_list))[0]:
     print(name + " is in database.")

Salida:

John Guy is in database.

list(zip(*clients_list)) devolverá una lista que contiene una tupla con los nombres como tales:

[('John Guy', 'Bobby Jones', 'Claire Eubanks')]

Entonces todo lo que debe hacer es tomar esa tupla de la lista usando [0] y verificar esa tupla si existe el nombre que dio como entrada.

O, alternativamente, puede desempaquetar la única tupla de nombres:

names, = list(zip(*clients_list))

Y lo usa para verificar si su nombre está allí:

if name in names:
     print(name + " is in database.")
0
Vasilis G. 28 feb. 2018 a las 09:48
clients_list = [
            {'John Guy': [28, '03171992', 'Student']},
            {'Bobby Jones': [22, '02181982', 'Student']},
            {'Claire Eubanks': [18, '06291998', 'Student']}]

def get_name(answer):
    data = ("No Data Present in DB.",{'Error':'Not Found'})
    for index, val in enumerate(clients_list):
        if answer in val.keys():
            data =  (f'{answer} present in database & found at {index}', clients_list[index])
    return data

asnwer = input("Enter a Name")

found, value = get_name(asnwer)

print(found, value)
>>>Bobby Jones present in database & found at 1 {'Bobby Jones': [22, '02181982', 'Student']}
0
Pradam 28 feb. 2018 a las 09:54