У вас есть большие списки DVD-дисков с многолетними фильмами, вы не можете разделить их как списки в формате словаря

#regex #list #dictionary

Вопрос:

Здравствуйте, я использую Python(3.8.2) для цикла с этим списком DVD, который дал мне член семьи, все организовано следующим образом:

 A Walk Among the Tombstones (2014)
Blithe Spirit (2020)
Jeepers Creepers (2001)
The Place Beyond the Pines (2012)
 

и т.д….

Поисковый код:

 inp = input().lower().title()
if inp in movieTitle:
    print(inp  " DVD is AVAILABLE")
else:
    print("THIS DVD IS NOT AVAILABLE")
 

Код для извлечения названий/лет:

 for lin in L:
    movieName = re.findall('(^.*)s', lin)
    movieTitle.append(movieName)
    movieYr = re.findall('((....))

примечание: ("L" - это исходный список, созданный из строки файла .txt)

Я создаю поиск с помощью пользовательского ввода, чтобы проверить наличие существующих названий. Мне удалось получить только названия DVD с помощью re.findall, чтобы вводимые пользователем данные легче соответствовали названию (в противном случае оно будет отображаться как несуществующее без указания года в скобках).

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

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

Пожалуйста, посоветуйте, как я могу подойти к этому по-другому; спасибо и ура~


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

1. Какой код вам нужно исправить? Пожалуйста, добавьте это к вопросу. Храните только соответствующую информацию в вопросе. Непонятно, что Search code здесь происходит.

2. Привет, Виктор. Моя проблема заключалась в том, что я получал "списки", возвращенные из моего re.findall, с помощью которых я не смог создать словарь. То, что я запрашивал, было возможным альтернативным подходом для извлечения моих данных из списка фильмов, в то же время имея возможность создать словарь с извлеченными данными. Господа Андрей Кесели ознакомился с моим запросом и посоветовал подходящее решение.

Ответ №1:

re.findall Будет возвращено значение a list , поэтому вы не можете использовать его в качестве ключа словаря. Вы можете использовать re.search и получить правильную группу поиска. Например:

 import re

with open("your_file.txt", "r") as f_in:
    L = f_in.readlines()


movies = {}
for lin in L:
    movieName = re.search(r"^([^(] )", lin).group(1).strip()
    movieYr = re.search(r"((d ))$", lin).group(1)
    movies[movieName] = movieYr

inp = input("Search for movie: ").lower().title()

if inp in movies:
    print(inp   " DVD is AVAILABLE")
else:
    print("THIS DVD IS NOT AVAILABLE")
 

С принтами:

 Search for movie: Blithe Spirit
Blithe Spirit DVD is AVAILABLE
 

movies Словарь является:

 {
    "A Walk Among the Tombstones": "2014",
    "Blithe Spirit": "2020",
    "Jeepers Creepers": "2001",
    "The Place Beyond the Pines": "2012",
}
 

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

1. Ого, спасибо тебе, Андрей! Я не понимал, что, используя re.search вместо findall, я смогу избежать превращения результатов в списки. Спасибо тебе за это. Также мне понравилась ваша переработка моего re, в следующий раз я буду иметь в виду букву "r" для необработанных строк. Отличная штука. Если вы можете уточнить; в чем преимущество открытия текстового файла с помощью "с" "как" против просто x = открыть('text.txt'), то для строки в x?

2. @ArtimusMaximus с with файлом автоматически закрывается. Обычно рекомендуется очищать ресурсы после их использования ( with делайте это автоматически).

3. @ Andrej Kesely Еще одна жемчужина информации, спасибо, Андрей, похоже, у меня есть новый и предпочтительный способ работы с филями. Мой проект тоже продвигается вперед, еще раз спасибо!

, lin)
movieYear.append(movieYr)
примечание: («L» — это исходный список, созданный из строки файла .txt)

Я создаю поиск с помощью пользовательского ввода, чтобы проверить наличие существующих названий. Мне удалось получить только названия DVD с помощью re.findall, чтобы вводимые пользователем данные легче соответствовали названию (в противном случае оно будет отображаться как несуществующее без указания года в скобках).

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

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

Пожалуйста, посоветуйте, как я могу подойти к этому по-другому; спасибо и ура~

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

1. Какой код вам нужно исправить? Пожалуйста, добавьте это к вопросу. Храните только соответствующую информацию в вопросе. Непонятно, что Search code здесь происходит.

2. Привет, Виктор. Моя проблема заключалась в том, что я получал «списки», возвращенные из моего re.findall, с помощью которых я не смог создать словарь. То, что я запрашивал, было возможным альтернативным подходом для извлечения моих данных из списка фильмов, в то же время имея возможность создать словарь с извлеченными данными. Господа Андрей Кесели ознакомился с моим запросом и посоветовал подходящее решение.

Ответ №1:

re.findall Будет возвращено значение a list , поэтому вы не можете использовать его в качестве ключа словаря. Вы можете использовать re.search и получить правильную группу поиска. Например:


С принтами:


movies Словарь является:


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

1. Ого, спасибо тебе, Андрей! Я не понимал, что, используя re.search вместо findall, я смогу избежать превращения результатов в списки. Спасибо тебе за это. Также мне понравилась ваша переработка моего re, в следующий раз я буду иметь в виду букву «r» для необработанных строк. Отличная штука. Если вы можете уточнить; в чем преимущество открытия текстового файла с помощью «с» «как» против просто x = открыть(‘text.txt’), то для строки в x?

2. @ArtimusMaximus с with файлом автоматически закрывается. Обычно рекомендуется очищать ресурсы после их использования ( with делайте это автоматически).

3. @ Andrej Kesely Еще одна жемчужина информации, спасибо, Андрей, похоже, у меня есть новый и предпочтительный способ работы с филями. Мой проект тоже продвигается вперед, еще раз спасибо!