所以我有一段时间没有完全使用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
我添加了“最喜欢的歌曲”数量(以及库中歌曲的数量)来测试并查看我的循环和if语句是否会删除任何东西,但它没有(因为数字是相同的)在循环之前和之后) - 我认为它与此有关,因为代码工作正常,否则它只是不修剪列表。
如果需要任何额外的代码,我会非常乐意提供它。
答案 0 :(得分:3)
尝试列表理解来过滤词典列表:
library = ...
good_songs = [ x for x in library if x['rating'] == '5' ]
答案 1 :(得分:1)
API将评级视为字符串。
您将评分视为整数。这就是为什么没有删除曲目的原因。