Необходимо определить словарь без внесения в него изменений

#python #dictionary #passwords #cloud

Вопрос:

Я пытаюсь сделать сохранитель паролей, где пользователи могут вставить пароль, и он будет сохранен на компьютере. Я начал с

 password = str(input("What is your password that you want to save?"))
url = str(input("Which is the site that you want your password to save to?"))
password_saved = {url : password}
with open('password_saved', 'wb') as password_saved_file:
 pickle.dump(password_saved, password_saved_file)
print(password_saved)
 

Однако password_saved = {url:password} сбрасывает весь словарь на этот, поэтому, если вы запустите его, он просто сбросится только на один, вместо того, чтобы сохранить его весь. Поэтому я попытался заменить его на:

 password_saved[url] = password
 

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

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

1. Вам необходимо внести изменения в словарь. Вы на самом деле определяете здесь новый . В этом-то и проблема

2. Спасибо! Не могли бы вы объяснить, как я могу это сделать?

3. @idiotic_nub Вы хотите сохранить пароль для одного веб-сайта? если нет, то, возможно, вам нужно открыть файл в режиме добавления.

4. @Hetal Такер На ваш вопрос, нет, я не храню пароль для одного веб-сайта. Но, если я использую appened, я получу ошибку, потому что я использую словарь, а не список.

Ответ №1:

На самом деле, с вашим кодом все в порядке. Но если вы введете одно и то же значение 2 раза, оно не будет отображаться. Обязательно попробуйте разные URL-адреса для каждого из них, чтобы убедиться, что все работает.

Ответ №2:

Сначала объявите словарь, а затем передайте индекс и значение в словарь.

 password_saved = {}
password_saved[url] = password
 

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

1. Да, но если я это сделаю, то password_saved будет сброшен на пустой, потому что я только что объявил его пустым в первой строке. Есть ли способ это исправить?

2. @idiotic_nub вам нужно десериализовать свой маринад , изменить полученный словарь, а затем изучить его .

3. @juanpa.arriviilaga Я действительно не понимаю, что вы подразумеваете под ресериализацией и десериализацией моего маринованного огурца. Не могли бы вы привести мне пример?

Ответ №3:

когда вы говорите, что «это» не определено, вы имеете в виду словарь? Если это так, то это может быть просто проблемой инициализации перед вызовом. Прямо сейчас вы создаете новый словарь с именем «password_saved» только с одной записью. Это должно выглядеть примерно так

 password_saved = {}

...

password = str(input("What is your password that you want to save?"))
url = str(input("Which is the site that you want your password to save to?"))
password_saved[url] = password
with open('password_saved', 'wb') as password_saved_file:
    pickle.dump(password_saved, password_saved_file)
print(password_saved)
 

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

1. Да, но если я сделаю password_saved = {}, то при запуске он будет возвращен в пустой диктонарий, я хочу только определить словарь, но я не хочу вносить в него изменения.

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

3. Я имею в виду, что когда я делал password_saved = {} и последний запуск, который я делал, я делал password_saved = {‘ youtube.com ‘ : ‘пароль’}, то вместо этого словарь снова превратит его в пустой.

4. Это также сработало бы для инициализации словаря, у вас не должно возникнуть никаких проблем с использованием password_saved[url] = пароль. попробуйте еще раз вот так и дайте мне знать, что произойдет, потому что с этим утверждением нет никаких проблем.