#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'