Для решения гендерной проблемы: str.split и разделить на «|».
mov ie и идентификаторы пользователей уникальны и также используются в скорости для связи с двумя другими csv, я использую словарь с идентификатором в качестве ключа для хранения данных movies.csv и users.csv - хорошая идея для облегчения поиска.
Примерно так:
import csv
movies = {}
with open("movies.csv", 'r', encoding = 'utf-8') as csv_file:
reader = csv.reader(csv_file, delimiter=",", lineterminator='\n')
for id_, title, gender in reader:
movies[id_] = {"title": title, "gender": set(gender.split("|"))}
users = {}
with open("users.csv", 'r', encoding = 'utf-8') as csv_file:
reader = csv.reader(csv_file, delimiter=",", lineterminator='\n')
for id_, gender, age_range in reader:
users[id_] = {"age_range": age_range, "gender": gender}
genrep = input("Input genre: ")
genre_mov = input("Input movie: ")
count = {"1": 0, "18": 0, "25": 0, "35": 0, "45": 0, "50": 0, "56": 0}
with open("rate.csv", 'r', encoding = 'utf-8') as csv_file:
reader = csv.reader(csv_file, delimiter=",", lineterminator='\n')
for user_id, movie_id, _ in reader:
user = users.get(user_id)
movie = movies.get(movie_id)
if user["gender"] == genrep and genre_mov in movie["gender"]:
count[user["age_range"]] += 1
print(f"Minor Rank 18: {count['1']}",
f"Rank 18-24: {count['18']}",
f"Rank 25-34: {count['25']}",
f"Rank 35-44: {count['35']}",
f"Rank 45-49: {count['45']}",
f"Rank 50-55: {count['50']}",
f"Mayor rank 56: {count['56']}",
sep="\n"
)
Каждый идентификатор присутствует в rate.csv присутствует в двух других словарях, хотя в противном случае было бы достаточно проверить, что методы dict.get не возвращают None.