1

Тема: Функція, що сортує пісні за вказаним параметром

Підкажіть, будь ласка, як можна покращити тіло функції(а точніше, дописати), щоб вона добре працювала?
Розробити функцію sort_songs(song_titles, length_songs, key), що сортує пісні за вказаним параметром (key). Функція при виклику приймає наступні аргументи:
параметр song_titles - це список назв пісень (наприклад гурту Океан Ельзи);
параметр length_songs - це відповідний список тривалостей пісень;
параметр key - ключ за яким буде здійснюватися сортування;
та повертає один відсортований список кортежів першим елементом якого є назва пісні, а другим тривалість цієї пісні.
Серед ключів обов'язково передбачити сортування за тривалістю пісень (song_length), за довжиною назви (title_length) та за першою літерою останнього слова назви (last_word). Якщо списки мають різну довжину або їх елементи не є відповідного типу, то функція повинна повернути None.

def sort_songs(song_titles, length_songs, key):
    k = song_titles
    v = length_songs
    dictionary = dict(zip(k, v))
    if key == 'song_length':
        print(sorted(dictionary.items(), k = lambda kv:(kv[1], kv[0])))
    elif key == 'title_length':
        new_dictionary = {}
        for k in sorted(dictionary, k = len, reverse=True):
            new_dictionary[k] = dictionary[k]
        print(new_dictionary)

2 Востаннє редагувалося koala (20.05.2019 19:52:54)

Re: Функція, що сортує пісні за вказаним параметром

lehiv написав:

Якщо списки мають різну довжину або їх елементи не є відповідного типу, то функція повинна повернути None.

Не бачу перевірки. Різну довжину доведеться робити if-ом, типи, гадаю, можна простим try - except навколо решти коду.

lehiv написав:
    k = song_titles
    v = length_songs

Нащо перейменовувати змінні, причому зі зрозумілих назв на незрозумілі?

lehiv написав:

та повертає один відсортований список кортежів

ваша функція нічого не повертає.
І нащо вам узагалі словник? Вам потрібні:
- список кортежів (list(zip));
- словник лямбд ключів для сортування (якщо зі словником складно - можна if - elif - elif);
- один виклик sorted з відповідним ключем.

І додайте тег code (кнопка <>) навколо свого коду.

Подякували: leofun011