#python #python-3.x #list #dictionary
#python #python-3.x #Список #словарь
Вопрос:
Любая помощь будет заметна. Я пытаюсь достичь следующего для целей шифрования с использованием ключей, не уверен, как писать код с использованием словаря / списка, мне нужна функция обновления, чтобы обойти и проверить, какой ключ используется для шифрования файлов, я пытаюсь достичь в этом примере
Моя попытка:
dict = {}
x = {}
y = {}
# already have this value
dict = {"keyfile1": "encryptfile1"}
print(dict)
# want to check if value already exist and update accordingly
while True:
x = input("Enter key value: ")
y = input("Enter file name: ")
dict[x] = y
dict.update({x: y}) # it's not updating with same key value
# dict.setdefault(x, []).append(y) # try this but throwing AttributeError: 'str' object has no attribute 'append'
print(dict)
Комментарии:
1. Я не понимаю вашего вопроса. Что вы имеете в виду «это не обновление с тем же значением ключа»? Покажите точный пример того, что вводит пользователь, точно , что происходит в результате каждой отдельной попытки, и объясните , чем именно это отличается от того, что вы на самом деле хотите . Например, точно покажите, что должно содержаться в dict впоследствии, по сравнению с тем, что на самом деле содержится.
Ответ №1:
Должно сработать следующее:
encrypt_key_value_dict = {}
encrypt_key_value_dict = {"keyfile1": ["encryptfile1"]}
print(encrypt_key_value_dict)
while True:
x = input("Enter key value: ")
y = input("Enter file name: ")
if x in encrypt_key_value_dict:
encrypt_key_value_dict[x].append(y)
else:
encrypt_key_value_dict[x]=[y]
print(encrypt_key_value_dict)
Ответ №2:
Я думаю, вы могли бы использовать defaultdict
с этим.
Вот как это работает:
from collections import defaultdict
# Factory is a list class, which will be called when inserting into the dict object
encrypt_key_value_dict = defaultdict(list, {"keyfile1": ["encryptfile1"]})
print(encrypt_key_value_dict)
while True:
x = input("Enter key value: ")
y = input("Enter file name: ")
"""
Here you can append to the list immediately, because the value from
the defaultdict is programmatically evaluated as a list object
"""
encrypt_key_value_dict[x].append(y)
print(encrypt_key_value_dict)
Ответ №3:
вы можете использовать multidict для своих нуждhttps://multidict.readthedocs.io/en/stable/multidict.html#multidict
Комментарии:
1. Хотя это подсказка, я не нахожу ее очень полезной. Рассмотрите редактирование, чтобы показать, как multidict решает проблему.