简体   繁体   中英

Unable to write condition to update dictionary value in python

Please help! How can I write condition in my existing code which will check as below. Please look commented block. I can't append value in the dictionary/list. What do I need to write/change?

  1. When user come back to main menu and run encryption process again using same key file but save the encrypted file in different name. User can create as many encrypted file using same key.

My try:

import Encrypt
from collections import defaultdict

key_value_dict = {}

def encrypt_file():
    try:

        txtfile = input("Your plain txt file that you want to encrypt : ")
        encrypt_file = input("Directory to save the encrypted file : ")
        key = input("Key for encryption : ")

        # process for encryption
        Encrypt.encrypt_file(txtfile, encrypt_file, key)

        # ----------------------------------------------------------------
        key_value_dict = defaultdict(list, {key: encrypt_file})

        print(key_value_dict)

        key_value_dict [key].append(encrypt_file)
        print(key_value_dict )
        # --------------------------------------------------------------------
    except FileNotFoundError:
        print("File Not Found!")


def menu():
    selection = True
    while selection:
        print("""
MAIN MENU:
[1] Encrypt files using existing keys.
[2] Exit.
        """)
        try:  
            selection = input("Please select : ")

            if selection == "1":
                encrypt_file()  # call function
            elif selection == "2":
                print("\n[4] Keys are used for encryption:", "\n", key_value_dict)
                selection = None
            else:
                print("\n Invalid selection! Try again")
        except ValueError:  
            print("\n Exception: Invalid user input!")

# Main function
if __name__ == '__main__':
    menu()  

If I understand correctly I don't think you need defaultdict

Try this:

# define this first outside the function like you have
encrypt_key_value_dict = {}

# Within your code block, get rid of the assignment to default dict
if encrypt_key_value_dict[key]:
    encrypt_key_value_dict.append(encrypt_file)
else:
    encrypt_key_value_dict[key] = [encrypt_file]

I can't see from your code where you keys are getting passed etc but I am sure you can figure that out.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM