1
votes

Dictionnaire à l'intérieur de la liste

Imaginez que j'ai cette liste:

if {'user':user,'password':password} in a:
    print("okay")
else:
    if {'user':user} in a and {'password':password} not in a:
        print("user okay, but incorrect pass")
    else:
        print("No username")

Maintenant, je veux savoir si l'utilisateur et le mot de passe saisis sont dans la liste précédente, comment puis-je résoudre ce problème?

Si je veux maintenant avoir 3 scénarios: un où l'utilisateur et le mot de passe correspondent, le second où le nom d'utilisateur est correct mais le mot de passe est incorrect et le dernier où le nom d'utilisateur n'existe pas.

a=[ {"user":"John","password":"123"} , {"user":"Mike","password":"12345"} ,{"user":"Peter","password":"qwerty"}]

user=input("insert your username")
password=input("insert your password")

Ce type de code ne fonctionnera pas, non? Alors, comment puis-je résoudre la deuxième étape (après la première autre)?


2 commentaires

Si vous pouvez changer la structure de cela, je vous recommande de travailler directement avec des dictionnaires, c'est-à-dire {'Jhon': '1234', 'Mike': '12345'}


C'est une sorte d'exercice, mais merci pour votre contribution.


3 Réponses :


4
votes

Utiliser:

if {'user':user,'password':password} in a:
    # it is already in there
elif any(user == i['user'] and password != i['password'] for i in a):
    # user name is correct, but password isn't
else:
    # it isn't in there

Utiliser:

if {'user':user,'password':password} in a:
    # it is already in there
else:
    # it isn't in there


2 commentaires

Si je veux avoir comme 3 scénarios: un où l'utilisateur et le mot de passe correspondent, le second où le nom d'utilisateur est correct mais le mot de passe est incorrect et le dernier où le nom d'utilisateur n'existe pas.


@alladin a édité le mien.



0
votes

Une façon de procéder:

a=[ {"user":"John","password":"123"} , {"user":"Mike","password":"12345"} ,{"user":"Peter","password":"qwerty"}]

user=input("insert your username")
password=input("insert your password")

flag = True
for i in a :
    if i['user'] == user and i['password'] == password :
        print('match') # or whatever
        flag = False
        break

if flag :
    print('not there ') # or whatever


2 commentaires

Salut, ouais, j'avoue que le vôtre est simple et plus pythonique. Je n'ai pas vu votre réponse lorsque j'ai publié ceci. Mais je pense que c'est facilement compréhensible même par un programmeur non pythonique.


Merci pour l'aide



0
votes

Vous pouvez suivre la solution suggérée par @ U9-Forward ou vous pouvez changer votre dict et au lieu d'avoir une liste de dictionnaires, vous pouvez simplement avoir un dictionnaire où la clé = nom réel et valeur = mot de passe réel. Si vous avez beaucoup d'objets dans votre dict et que cette fonction va être appelée très souvent, alors cette solution est meilleure en termes de complexité temporelle.

Donc, vous convertissez initialement votre liste a en dict appelé user_password_dict

if user in user_password_dict and user_password_dict[user] == password:
    # do something here
else:
    # do something here

Après cela, vous pouvez facilement vérifier si l'utilisateur et le mot de passe correspondant existent dans votre user_password_dict par cette déclaration:

user_password_dict = {user_obj['user']: user_obj['password'] for user_obj in a}


0 commentaires