Возвращает другое значение при запросе словаря

#python #dictionary

#питон #словарь #python

Вопрос:

Я извлекаю данные из словаря на Python. У меня это настроено следующим образом:

 entries = [
    {'website': 'yahoo','username': 'jblumberg','password': 'sdkljfhwe'},
    {'website': 'google','username': 'jblumberg1','password': 'CoIushujSetu'}
    ]
  

Я прошу пользователя предоставить мне веб-сайт, чтобы я мог вернуть пароль следующим образом:

 def lookup_password(website):

    if website in entries.keys():
        encrypted_password = entries[website]

    return password_encrypt(encrypted_password, -encryption_key)

    pass
  

Однако это не даст мне того, что я хочу. Как мне настроить его, чтобы он выдавал мне значение пароля для предоставленного веб-сайта?

Комментарии:

1. Разве это не должно быть entries = { ['website': 'yahoo','username': 'jblumberg','password': 'sdkljfhwe'], ['website': 'google','username': 'jblumberg1','password': 'CoIushujSetu'] } ? Думаю, вы напутали со скобками.

2. entries.keys() неверно. записи — это список словарей

3. Спасибо всем за помощь. По ходу работы я поиграю с созданием словаря списков или использованием веб-сайта перед словарем. На данный момент функция поиска Люка была тем, что я изначально искал. Спасибо!

Ответ №1:

Сначала давайте реструктурируем ваш dict следующим образом, чтобы это был dict с каждым ключом в виде веб-сайта, как, кажется, вы обрабатываете его в своем коде:

 entries = {
    'yahoo': {'username': 'jblumberg', 'password': 'sdkljfhwe'},
    'google': {'username': 'jblumberg1', 'passwprd': 'CoIushujSetu'}
}
  

Теперь пара изменений в вашем исходном коде приводит нас к тому, что должно работать:

 if website in entries:
    encrypted_password = entries[website]['password']
  

Я должен отметить это website in entries и website in entries.keys() сделать то же самое здесь.

Ответ №2:

В вашей концепции ваших данных есть множество небольших проблем :

Первые записи — это список. Поэтому вы не сможете вызвать «.keys()»

Также при использовании

 encrypted_password = entries[website]
  

при этом будет сохранен весь словарь. Это означает, что тогда вы сможете получить доступ к паролю через [‘password’]

 encrypted_password = entries[website]['password']
  

Для продолжения: если вы измените свои данные, чтобы они выглядели следующим образом

 entries = {
'yahoo':{
    'username': 'jblumberg','password': 'sdkljfhwe'
},
'google':{
    'username': 'jblumberg1','password': 'CoIushujSetu'
},
}
def lookup_password(website):
    if website in entries:
        encrypted_password = entries[website]['password']
        return password_encrypt(encrypted_password, -encryption_key)

    pass
  

Но если вы сохраните те же данные, это должно будет выглядеть следующим образом:

 def lookup_password(website):
    for record in entries:
        if record['website'] == website:
            encrypted_password = record['website']
            return password_encrypt(encrypted_password, -encryption_key)

    pass
  

Ответ №3:

Вы могли бы использовать другой словарь:

 entries = [
    {'yahoo':{'username': 'jblumberg','password': 'sdkljfhwe'},
    {'google':{'username': 'jblumberg1','password': 'CoIushujSetu'}
]
  

Тогда произойдет следующее:

 >> website = 'yahoo'
>> entries[website]
>> {'username': 'jblumberg','password': 'sdkljfhwe'}
  

итак, если вы хотели пароль:

 >> entires[website]['password']
>> 'sdkljfhwe'
  

Ответ №4:

Попробуйте:

 def lookup_password(website):
    for entry in entries:
        if entry['website'] == website:
            return entry['password']
  

Вывод:

 In[2]: lookup_password('google')
Out[2]: 'CoIushujSetu'