Изучаю Python и застрял на kwargs

Доброго времени суток.

Изучаю Python и застрял:

def tracklist(*artist,**tracks):
    for name in artist:
        print(name)
    for key, value in tracks.items():
        print(f"'ALBUM':{key}, 'TRACK':{value}")


tracklist(Woodkid={"The Golden Age": "Run Boy Run",
               "On the Other Side": "Samara"},
      Cure={"Disintegration": "Lovesong",
            "Wish": "Friday I'm in love"})

Функция должна распечатать значения из словаря в следующем виде:

Woodkid
ALBUM: The Golden Age TRACK: Run Boy Run
ALBUM: On the Other Side TRACK: Samara
Cure
ALBUM: Disintegration TRACK: Lovesong
ALBUM: Wish TRACK: Friday I'm in love

Где-то закралась ошибка, не могу найти


Ответы (1 шт):

Автор решения: gil9red

**tracks (kwargs) это словарь из именованных параметров функции, у вас это будет Woodkid и Cure, а в *artist попадут позиционные параметры, у вас их нет, т.к. только именованные передаете, поэтому в artist (args) будет пусто

С учетом выше написанного код поменял на:

def tracklist(**tracks):
    for name, tracks in tracks.items():
        print(name)
        for album, track in tracks.items():
            print(f"ALBUM: {album}, TRACK: {track}")


tracklist(
    Woodkid={"The Golden Age": "Run Boy Run", "On the Other Side": "Samara"},
    Cure={"Disintegration": "Lovesong", "Wish": "Friday I'm in love"}
)

Результат:

Woodkid
ALBUM: The Golden Age, TRACK: Run Boy Run
ALBUM: On the Other Side, TRACK: Samara
Cure
ALBUM: Disintegration, TRACK: Lovesong
ALBUM: Wish, TRACK: Friday I'm in love
→ Ссылка