Добавление к значению int с помощью уже существующих словарей

#python #dictionary #if-statement

#python #словарь #if-оператор

Вопрос:

Я пытаюсь настроить функцию, которая будет вычислять оценку сходства двух фильмов. Существуют уже существующие словари, в которых в качестве ключей указаны фильмы, а режиссеры, жанры или главные действующие лица являются значениями. Существует три словаря актеров (перечислены 3 ведущих актера для каждого фильма). Код в основном работает нормально, но иногда я получаю результат, превышающий тот, который я должен получить.

 # create a two-variable function to deterime the FavActor Similarity score: 
def FavActorFunction(film1,film2):

    #set the result of the FavActor formula between two films to a default of 0.
    FavActorScore = 0
    #add 3 to the similarity score if the films have the same director.
    if direct[film1] == direct[film2]:
        FavActorScore  = 3
    #add 2 to the similarity score if the films are in the same genre.
    if genre[film1] == genre[film2]:
        FavActorScore  = 2
    #add 5 to the similarity score for each actor they have in common.
    if actor1[film1] == actor1[film2] or actor2[film2] or actor3[film2]:
        FavActorScore  = 5
    if actor2[film1] == actor1[film2] or actor2[film2] or actor3[film2]:
        FavActorScore  = 5     
    if actor3[film1] == actor1[film2] or actor2[film2] or actor3[film2]:
        FavActorScore  = 5
    #print the resulting score.                    
    return FavActorScore
  

я предполагаю, что при подсчете общих участников некоторые вещи считаются дважды. есть ли способ пересмотреть эту часть кода, чтобы получить более точный результат?

 if actor1[film1] == actor1[film2] or actor2[film2] or actor3[film2]:   
    FavActorScore  = 5
if actor2[film1] == actor1[film2] or actor2[film2] or actor3[film2]:  
    FavActorScore  = 5     
if actor3[film1] == actor1[film2] or actor2[film2] or actor3[film2]:  
    FavActorScore  = 5     
  

Комментарии:

1. Я действительно, действительно должен спросить: откуда берутся эти дурацкие структуры данных? Фильмом должен быть словарь, а атрибутами должны быть ключи (а действующие лица должны быть в последовательности или наборе).

Ответ №1:

Попробуйте выполнить in условие :

 if actor1[film1] in (actor1[film2], actor2[film2], actor3[film2]):
   FavActorScore  = 5 
if actor2[film1] in ( actor1[film2], actor2[film2], actor3[film2]):
   FavActorScore  = 5
if actor3[film1] in (actor1[film2], actor2[film2], actor3[film2]):
   FavActorScore  = 5
  

Когда вы пишете a==b or c or d , это верно, если a равно b или если c равно true, или если d равно true, не верно, если a равно b или c или d .