MuteX
MuteX

Reputation: 183

Add data to dictionary in python

Here is my dictionary:

inventory = {
    'gold' : 500,
    'pouch' : ['flint', 'twine', 'gemstone'], # Assigned a new list to 'pouch' key
    'backpack' : ['xylophone','dagger', 'bedroll','bread loaf']
}

I need to add 50 to the index of gold. What should I do? I tried:

inventory['gold'].append(50)

Upvotes: 0

Views: 1675

Answers (3)

user4459342
user4459342

Reputation: 1

If you want to add 60 to the value of the key "Platinum"

inventory ["Platinum"] += 60

If you want to keep the value of 500 but also have a value of 60 you need something to contain them both such as a list.

You could initialize your "Platinum" value with a list and then append 500 and then 60 to it.

inventory ["Platinum"] = list ()
inventory ["Platinum"].append (500)
inventory ["Platinum"].append (60)

Or you could use the defaultdict to make it slightly simpler.

from collections import defaultdict


inventory = defaultdict (list)  # every missing value is now a list.

inventory ["Platinum"].append (500) # add 500 to the list.
inventory ["Platinum"].append (60) # add 60 to the list.
inventory ["pouch"] = ['Flint', 'twine', 'gemstone'] # create a new key with a new value.
inventory['animals'].extend(['Elephant', 'dog','lion']) # extend list to include.
inventory['pouch'].remove('Flint')

Upvotes: 0

NDevox
NDevox

Reputation: 4086

Assuming you mean you want to append 50 to gold. Make gold a list:

inventory = {
    'gold' : [500],
    'pouch' : ['flint', 'twine', 'gemstone'], # Assigned a new list to 'pouch' key
    'backpack' : ['xylophone','dagger', 'bedroll','bread loaf']
}

inventory['gold'].append(50)

If you meant add, use Martijn's solution.

Upvotes: 2

Martijn Pieters
Martijn Pieters

Reputation: 1124848

gold is not a list. It is an integer, so you use addition:

inventory['gold'] += 50

This uses augmented assignment, which for integers is equivalent to:

inventory['gold'] = inventory['gold'] + 50

If you need gold to be a list as well, and want to end up with [500, 50] as the value, you'll have to replace the current value with a list:

inventory['gold'] = [inventory['gold'], 50]

If you need to add multiple values over time, and don't know if gold is a list or a simple integer, and cannot change the original dictionary to always use a list, you could use exception handling:

try:
    inventory['gold'].append(50)
except AttributeError:
    # not a list yet
    inventory['gold'] = [inventory['gold'], 50]

It would be far easier to maintain your project if you started with gold always being a list object, however.

Upvotes: 2

Related Questions