I am taking the cs50 ai python course . I was trying to run code that involved big .csv files so the cs50 ide would show the message "killed" and not run .it would run normally with the small csv files. so I copied what i had so far into visual studio.VS would load the big csv files with no problem but it gives me the error " 'set' object is not subscriptable "
right here
a_id = names[source.lower()]["id"]
this is how names was defined
# Maps names to a set of corresponding person_ids
names = {}
# Maps person_ids to a dictionary of: name, birth, movies (a set of movie_ids)
people = {}
# Maps movie_ids to a dictionary of: title, year, stars (a set of person_ids)
movies = {}
def load_data(directory):
"""
Load data from CSV files into memory.
"""
# Load people
with open(f"{directory}/people.csv", encoding="utf-8") as f:
reader = csv.DictReader(f)
for row in reader:
people[row["id"]] = {
"name": row["name"],
"birth": row["birth"],
"movies": set()
}
if row["name"].lower() not in names:
names[row["name"].lower()] = {row["id"]}
else:
names[row["name"].lower()].add(row["id"])
source: is a string variable from the user.
if I hover over name it says (name:dict)
same problem here
films = people[a_id]["movies"]
Try this instead
a_id = names[source.lower()]
This will set a_id
to set of id
s.
In your code, names
is a map between name and id (which is set type). So you were basically trying things like {'actor': {1, 5, 3}}['actor']['id']
.