Python: функция записи для проверки списка и возврата значений или нет - PullRequest
2 голосов
/ 13 октября 2019

Я действительно изо всех сил пытаюсь понять Python и выяснить, как ответить на следующий вопрос:

1) Принять список фильмов и название категории. Если категория отсутствует в данных, печатает сообщение о том, что она не существует и возвращает None.

Это список, на который она смотрит:

movies = [
{
"name": "Usual Suspects", 
"imdb": 7.0,
"category": "Thriller"
},
{
"name": "Hitman",
"imdb": 6.3,
"category": "Action"
},
{
"name": "Dark Knight",
"imdb": 9.0,
"category": "Adventure"
},
{
"name": "The Help",
"imdb": 8.0,
"category": "Drama"
},
{
"name": "The Choice",
"imdb": 6.2,
"category": "Romance"
},
{
"name": "Colonia",
"imdb": 7.4,
"category": "Romance"
},
{
"name": "Love",
"imdb": 6.0,
"category": "Romance"
}
]

И это код, который ядо сих пор, но он возвращает только совпадения и распечатки для каждого несоответствия, что не то, что я хочу:

def incat(cat):  
    for m in movies:  
        if m['category'] == cat:  
            print(m['name'])  
        else:  
            print(cat + ' does not exist')  

incat('Romance')

Я, вероятно, действительно упускаю что-то очень простое, но мне просто кажется, что это очень сложно обернутьмоя голова вокругЛюбая помощь очень ценится.

Ответы [ 6 ]

0 голосов
/ 13 октября 2019

Вы можете использовать понимание списка, чтобы перечислить всю информацию, относящуюся к вашей категории:

def in_cat(cat):
    new = []
    result = [i for i in movies if i['category'] == cat]
    new.append(result)
    print(new)


in_cat('Thriller')

Вывод:

[[{'name': 'Usual Suspects', 'imdb': 7.0, 'category': 'Thriller'}]]
0 голосов
/ 13 октября 2019

Добавьте последний, с сетом и картой.

    movies = [ { "name": "Usual Suspects", "imdb": 7.0, "category": "Thriller" }, { "name": "Hitman", "imdb": 6.3, "category": "Action" }, { "name": "Dark Knight", "imdb": 9.0, "category": "Adventure" }, { "name": "The Help", "imdb": 8.0, "category": "Drama" }, { "name": "The Choice", "imdb": 6.2, "category": "Romance" }, { "name": "Colonia", "imdb": 7.4, "category": "Romance" }, { "name": "Love", "imdb": 6.0, "category": "Romance" } ]

def incat(movie_list, cat):
    my_cat = set(map(lambda movie : movie.get("category"), movie_list))
    if cat not in my_cat:
        print("not found")
    retuen None

0 голосов
/ 13 октября 2019

Вы также можете немного изменить свой код. Я бы создал набор категорий (уникальных категорий), а затем я бы проверил, существует ли входящая категория. Это мой дубль:

movies = [
{
"name": "Usual Suspects", 
"imdb": 7.0,
"category": "Thriller"
},
{
"name": "Hitman",
"imdb": 6.3,
"category": "Action"
},
{
"name": "Dark Knight",
"imdb": 9.0,
"category": "Adventure"
},
{
"name": "The Help",
"imdb": 8.0,
"category": "Drama"
},
{
"name": "The Choice",
"imdb": 6.2,
"category": "Romance"
},
{
"name": "Colonia",
"imdb": 7.4,
"category": "Romance"
},
{
"name": "Love",
"imdb": 6.0,
"category": "Romance"
}
]

def check_category(category, movies):
    # create a set of categories
    categories = {cat['category'] for _,cat in enumerate(movies)}

    if category not in categories:
        print(f'Category: {category} does not exist')
        return None
    else:
        return True

check_category('t',movies)
0 голосов
/ 13 октября 2019

Вы, вероятно, ищете такую ​​функцию:

def incat(cat):  
    f = 0
    for m in movies:  
        if m['category'] == cat:  
            f = 1
            print(m['name'])  
    if f == 0:
        print(cat + ' does not exist')
        return None

Эта функция сначала устанавливает флаг в 0, а затем сопоставляет каждую категорию фильма с той, которая была предоставлена ​​с использованием цикла for. Если категория фильма соответствует предоставленной категории, она устанавливает флаг в 1 и печатает название фильма. После проверки всех фильмов, он проверяет флаг. Если это все еще 0, это означает, что ни одна категория фильма не соответствовала предоставленной категории. Таким образом, он печатает соответствующее сообщение и возвращает None.

0 голосов
/ 13 октября 2019

Вы можете использовать флаг для этого

def incat(cat):  
    flag = false
    for m in movies:  
        if m['category'] == cat:  
            print(m['name'])  
            flag = true
    if not flag:
        print(cat + ' does not exist') 
incat('Romance')
0 голосов
/ 13 октября 2019

Вы можете использовать any(), чтобы проверить, совпадает ли какая-либо из категорий с желаемой категорией, и напечатать, что это не так, если нет (я предполагаю, что вы хотите печатать только в том случае, если категория не найдена):

def incat(cat):
    if not any(m['category'] == cat for m in movies):
        print(cat + ' does not exist') 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...