Словарь внутри списка - PullRequest
       47

Словарь внутри списка

0 голосов
/ 04 марта 2019

Представьте, что у меня есть этот список:

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

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

Теперь я хочу узнать, есть ли введенные имя пользователя и пароль в предыдущем списке, как я могу решить эту проблему?

ЕслиТеперь я хочу иметь 3 сценария: один, где имя пользователя и пароль совпадают, второй, где имя пользователя правильное, но пароль неправильный, и последний, где имя пользователя не существует.

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")

Этот типкода не будет работать, верно?Так как я могу решить второй шаг (после первого еще)?

Ответы [ 3 ]

0 голосов
/ 04 марта 2019

Один из способов сделать это:

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
0 голосов
/ 04 марта 2019

Вы можете следовать решению, предложенному @ U9-Forward, или вы можете изменить свой диктант, и вместо списка словарей вы можете просто иметь словарь, в котором ключ = фактическое имя, а значение = фактический пароль.Если в вашем диктовке много объектов, и эта функция будет вызываться очень часто, тогда это решение лучше с точки зрения сложности времени.

Итак, вы изначально конвертируете свой список a в dict с именем user_password_dict

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

После этого вы можете легко проверить, существует ли пользователь и соответствующий пароль в вашем user_password_dict, с помощью этого оператора:

if user in user_password_dict and user_password_dict[user] == password:
    # do something here
else:
    # do something here
0 голосов
/ 04 марта 2019

Использование:

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

Редактировать

Использование:

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
...