Home > Mobile >  How to add a value to a dictionary that has a duplicate key
How to add a value to a dictionary that has a duplicate key

Time:10-26

I have this problem where I would like to add a value to a dictionary but the key is duplicate. I would like the key to to hold a list with multiple values

this is what I have tried

def storingPassword():
    username=("bob")#key,
    password=("PASSWROD1")#value 




    allpasswords={
        "jeff":"jeff 123 ",
        "bob" : "bob 123"
    }

    if username  not in allpasswords:
        allpasswords[username]=password
    else:
        allpasswords[username].append(password)
        

    return allpasswords

but i keep getting this error "AttributeError: 'str' object has no attribute 'append'"

I expect a output something like this;

        "jeff":"jeff 123 ",
        "bob" : ["bob 123","PASSWORD1"]

CodePudding user response:

That's because the value in your allpasswords dict is a string and you are trying to treat it like a list. Why are you trying to make your data structure complex with few values as list and few as string? I recommend to convert everything to list for a simpler logic.

Hence your code should be like this:

allpasswords={
    "jeff": ["jeff 123 "],
    "bob" : ["bob 123"]
}

allpasswords[username].append(password)

Instead of using dict object, you can use collections.defaultdict. It will let you define a dict with default value as list. So you don't need to even explicitly initialise value of new key as list. For example:

from collections import defaultdict

my_dict = defaultdict(list)
my_dict['new_key'].append('new_value')

# dictionary will hold the value:
#     {'new_key': ['new_value']})
    

CodePudding user response:

Initiate your dictionary entry with a list instead of just a string.

allpasswords[username] = [password]   # List containing a single password

You will then be able to append to it.

(Having some entries contain a string while others contain a list of strings is best avoided - when it is time to look them up or print them, you would have to check each time whether it is a list or string.)

CodePudding user response:

What you should know is it's good to have a defined structure of your data, so if you are gonna have lists to store multiple value, have it also for those with single value. The solution by Stuart is correct. So flag it as the answer.

  • Related