Обновить словарь / список с тем же ключом, но другим значением в python

#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 решает проблему.