Как преобразовать код одной строки в for в циклах?

#python #nested

Вопрос:

Я новичок в python, так что это может быть слишком простой вопрос, но как я могу преобразовать их во вложенные циклы для в соответственно? — Я застрял из-за фигурных скобок.

[{a['artist'] for a in n['tracks']} for user in users for n in user['playlists']]

{v['party'] for vp in vps for v in vp['positions']}

Ответ №1:

Со временем это станет более интуитивно понятным, но вам просто нужно «развернуть» эти циклы внутри этих списков. Первым из них было бы:

 artists = []
for user in users:
    for n in user["playlists"]:
        for a in n["tracks"]:
            artists.append(a["artist"])     
 

И второй:

 parties = []
for vp in vps:
    for v in vp["positions"]:
       parties.append(v["party"])
 

Обратите внимание, что списки, в которых вы будете хранить самый низкий уровень цикла, а именно «вечеринки» и «артисты», должны быть созданы до начала цикла.

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

1. Есть фигурные скобки..

Ответ №2:

Как правило, первая часть понимания-это контент, который будет добавлен/добавлен в результирующий список/набор. Остальное-вложенные циклы в том же порядке, в каком вы написали бы их, используя обычные операторы for-loop.

Первое понимание — это составление списка наборов. Это понимание набора, вложенное в понимание списка:

 result = list()                       # output of comprehension
for user in users:                    # for user in users ...
    for n in user['playlists']:       # for n in user['playlists'] ...
        tracks = set()                    # nested set comprehension {...}
        for a in n['tracks']:             # for a in n['tracks'] ... 
            tracks.add(a['artist'])       # a['artist']
        result.append(tracks)         # list of the tracks sets
 

Второй — создание набора:

 result = set()                  # result of comprehension
for vp in vps:                  # for vp in vps ...
    for v in vp['positions']:   # for v in vp['positions'] ...
       result.add(v['party'])   # v['party']