I want to update this dictionary

Question:

tickets is an empty dictionary in a file called Cities. I want to update the dictionary with new values after every time I run this program, but it ends up erasing the dictionary and adding only 1 key-value pair.

from Cities import tickets

a = {random.randint(1,999): random.randint(1,89898)}
tickets.update(a)
print(tickets)
Asked By: Viper

||

Answers:

If you want to keep the state between different executions of your script, you need to write to disk. Hence I suggest you use the built-in module shelve, as follows:

# cities.py
import shelve
tickets = shelve.open("data")

then use it from your script:

import random
from cities import tickets

with tickets:
    print(list(tickets.items()))
    a = {f"{random.randint(1, 999)}": random.randint(1, 89898)}
    tickets.update(a)

Output (first run)

[]

Output (second run)

[('900', 67984)]

The only caveat though is that the keys need to be strings.

Note: (from the docs) Do not rely on the shelf being closed automatically; always call close() explicitly when you don’t need it any more, or use shelve.open() as a context manager.

Answered By: Dani Mesejo
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.