Итак, я не использовал Python в то время, и я ржавый - я работаю над личным проектом, и API, который я использую, возвращает список словарей, которые представляют данные песни. То, что я пытаюсь сделать, - это существенно сократить возвращаемый список песен ТОЛЬКО тем, у кого рейтинг 5 (и удалить все остальные из списка). У меня есть код ниже, который, похоже, не работает. Кажется, что он ничего не удаляет и распечатывает весь список песен (что в моем случае становится довольно большим, так как это около 11 000 песен или около того).Проверка значения ключа в словаре в списке?
Как ему оказали помощь, я буду также опубликовать пример того, что возвращает API (для одной песни):
{
'comment':'',
'rating':'0',
'albumArtRef':[
{
'url': 'http://lh6.ggpht.com/...'
}
],
'artistId':[
'Aod62yyj3u3xsjtooghh2glwsdi'
],
'composer':'',
'year':2011,
'creationTimestamp':'1330879409467830',
'id':'5924d75a-931c-30ed-8790-f7fce8943c85',
'album':'Heritage ',
'totalDiscCount':0,
'title':'Haxprocess',
'recentTimestamp':'1372040508935000',
'albumArtist':'',
'trackNumber':6,
'discNumber':0,
'deleted':False,
'storeId':'Txsffypukmmeg3iwl3w5a5s3vzy',
'nid':'Txsffypukmmeg3iwl3w5a5s3vzy',
'totalTrackCount':10,
'estimatedSize':'17229205',
'albumId':'Bdkf6ywxmrhflvtasnayxlkgpcm',
'beatsPerMinute':0,
'genre':'Progressive Metal',
'playCount':7,
'artistArtRef':[
{
'url': 'http://lh3.ggpht.com/...'
}
],
'kind':'sj#track',
'artist':'Opeth',
'lastModifiedTimestamp':'1330881158830924',
'clientId':'+eGFGTbiyMktbPuvB5MfsA',
'durationMillis':'418000'
}
И мой код выглядит следующим образом:
library = api.get_all_songs()
print("There are",len(library),"items in your music library")
for track in library:
if track['rating'] != 5:
library.remove(track)
print("You have",len(library),"favorite tracks!")
return library
I добавлен в количество «любимых песен» (а также количество песен в библиотеке), чтобы проверить, будет ли мой цикл и оператор if удалять что-либо, а это не так (поскольку числа совпадают до и после loop). Я полагаю, что это имеет какое-то отношение к этому, так как код работает отлично в противном случае, он просто не обрезает список.
Если какой-либо дополнительный код необходим, я был бы более чем счастлив предоставить его.
Редко удалять элементы из списка, который вы зацикливаете. Это похоже на распиливание ветви дерева, на которой вы сидите. :) Подробнее см. [Странный результат при удалении элемента из списка] (http://stackoverflow.com/q/6260089/4014959). Тем не менее, вы можете сделать это безопасно, если вы перейдете назад по списку. –