#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 Еще одна жемчужина информации, спасибо, Андрей, похоже, у меня есть новый и предпочтительный способ работы с филями. Мой проект тоже продвигается вперед, еще раз спасибо!