Мне трудно понять словарь. У меня есть немного кода, который мне нужно проверить, был ли удален трек из библиотеки iTunes. Если это так, мне нужно удалить его из своего специального словаря плейлистов, а также из словаря мастер-треков.
Я попытался использовать приведенный ниже код, но он сообщает мне, что размер словаря изменился во время итерации.
Я читал здесь и здесь , пытаясь понять, как я делаю все это в понимании словаря, но это растопило мой мозг.
# Next step is to ensure the track_id for a particular persistent_id is correct
# because iTunes can change the track_id of a track, but the persistent_id
# remains the same regardless of any track changes.
#
# Step through each playlist in the musicDict dictionary and update the
# persistentID with the correct trackID or delete the track data from the
# dictionary if it cannot be found in the itl
for playlistKey in musicDict['playlists'].keys():
if 'tracks' in musicDict['playlists'][playlistKey]:
for persistentID in musicDict['playlists'][playlistKey]['tracks'].keys():
try:
musicDict['playlists'][playlistKey]['tracks'][persistentID] = itl.byPID[persistentID].track_id # Track exists in itl
except:
del musicDict['playlists'][playlistKey]['tracks'][persistentID] # track no longer exists in itl
if persistentID in musicDict['tracks'].keys() and persistentID not in itl.byPID.keys(): # check to see if the track needs to be deleted from the musicDict
del musicDict['tracks'][persistentID] # delete the track since it no longer exists in itl
Я использую модуль libpytunes и добавил еще один словарь под названием byPID, так как track_id не остается статичным для музыки iTunes, следовательно, переменная persistentID и словарь itl.byPID.
Как я уже писал выше, это приводит к ошибке (и я понимаю, почему) и я хотел бы превратить это в понимание списка или эффективный цикл for, если понимание не будет легко читаемым.