Попытка отфильтровать список в другой список на основе значения индекса

#python #list

Вопрос:

Я пытаюсь создать приложение, которое должно будет использовать набор данных IMDb. IMDb предоставляет наборы данных, в которых есть все названия на IMDb, включая телешоу и видеоигры. Например:

«tt9620292 фильм Многообещающая Молодая женщина Многообещающая Молодая женщина 0 2020 N 113 Преступление,Драма,Триллер

tt1568322 видеоИгра Бэтмен: Аркхем Сити Бэтмен: Аркхем Сити 0 2011 N N Боевик,Приключения,Криминал

tt0141842 Телесериалы Сопрано Сопрано 0 1999 2007 55 Преступление,Драма»

Я прочитал в наборе данных IMDb и разбил каждую строку на список, разделив их по вкладкам, что дает мне кучу списков, в которых в каждом списке есть описание названия(фильм, ТВ-код, короткометражка, видеоигра и т. Д.). Конечная цель состоит в том, чтобы прочитать этот текстовый файл набора данных IMDb, а затем записать его в другой файл, содержащий только заголовки с описанием фильма, сериала или короткометражки. На данный момент я распечатываю списки тестов, чтобы проверить, смогу ли я правильно отфильтровать все, кроме фильмов, телевизионных фильмов и коротких названий.

Теперь я застрял в точке, где я могу распечатать индекс одного из каждого списка, который выводит только описание каждого заголовка:вот так, но когда я пытаюсь использовать один и тот же список и индекс для заполнения другого списка только фильмами, сериалами и короткометражными названиями, он заполняет список каждым названием независимо от этого.

 IMDbFile = open("titleTest", "r")
lineList = IMDbFile.readlines()

listOfList = []
for x in lineList:
    listOfList.append(x.split("t"))

movieOnly = []
for x in listOfList:
    if x[1] == "short" or "movie" or "tvMovie":
        movieOnly.append(x)
    #print(x[1])


for n in movieOnly:
    print(n)
IMDbFile.close()
 

При печати списка «Только для фильмов» я получаю каждое название:вот так

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

1. Эта линия не сработает. if x[1] == "short" or "movie" or "tvMovie":movieOnly.append(x) Вместо этого попробуйте вот это. if x[1] in ("short","movie","tvMovie"):pass

2. @BuddyBobIII это работает, спасибо!

Ответ №1:

Я думаю, что ваша проблема заключается в том, как вы написали заявление if. Вместо:

 movieOnly = []
for x in listOfList:
    if x[1] == "short" or "movie" or "tvMovie":
        movieOnly.append(x)
 

пробовать

 movieOnly = []
for x in listOfList:
    if x[1] in ["short","movie","tvMovie"]:
        movieOnly.append(x)
 

Причина в том, что это:

 if 'a' == 'b' or 'c' or 'd':
    print('here')
 

будет напечатано «здесь», потому что

 or 'c'
 

оценивает, является ли «c» истинным, а не является ли » a «== «c»

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

1. это работает для меня, спасибо! спасибо также за объяснение