簡體   English   中英

檢查列表中字典中的鍵值?

[英]Checking the value of a key in a dictionary within a list?

因此,我有一段時間沒有完全使用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語句是否會刪除任何內容,但不會刪除(因為之前和之后的數量相同)循環)-我認為這與此有關,因為代碼可以正常工作,否則,它不會修剪列表。

如果需要任何額外的代碼,我會很樂意提供。

嘗試使用列表理解來過濾您的詞典列表:

library = ...

good_songs = [ x for x in library if x['rating'] == '5' ]

API將評分視為字符串。

您正在將評分視為整數。 這就是為什么不會刪除任何曲目的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM