2013-01-19 65 views
0

我想按鍵的值(年)排序JSON數據,然後試圖只顯示格式'DVD',我嘗試了很多方法但項目我無法達成一個乾淨的解決方案。你能幫我解決這個問題嗎?我是python的新手,如果這太簡單了,不妨在這裏問。python JSON按鍵值排序,然後顯示過濾的數據

JSON:

{ 
    "pagination": { 
     "per_page": 50, 
     "pages": 1, 
     "page": 1, 
     "urls": {}, 
     "items": 8 
    }, 
    "results": [{ 
     "style": ["RnB/Swing", "Ballad"], 
     "thumb": "http://api.discogs.com/image/R-90-217365-1270055830.jpeg", 
     "title": "Britney Spears - Oops!...I Did It Again", 
     "country": "US", 
     "format": ["CD", "Album"], 
     "uri": "/Britney-Spears-OopsI-Did-It-Again/master/27443", 
     "label": ["Jive"], 
     "catno": "01241-41704-2", 
     "year": "2000", 
     "genre": ["Pop"], 
     "resource_url": "http://api.discogs.com/masters/27443", 
     "type": "master", 
     "id": 27443 
    }, { 
     "thumb": "http://api.discogs.com/image/R-90-2029929-1259535792.jpeg", 
     "title": "Britney Spears - The Singles Collection", 
     "country": "UK", 
     "format": ["CD", "Compilation"], 
     "uri": "/Britney-Spears-The-Singles-Collection/master/203074", 
     "label": ["Jive"], 
     "catno": "88697 623422", 
     "year": "2009", 
     "genre": ["Pop"], 
     "resource_url": "http://api.discogs.com/masters/203074", 
     "type": "master", 
     "id": 203074 
    }, { 
     "style": ["RnB/Swing"], 
     "thumb": "http://api.discogs.com/image/R-90-1895804-1250792689.jpeg", 
     "title": "Britney Spears - Greatest Hits: My Prerogative", 
     "country": "US", 
     "format": ["DVD", "Compilation", "NTSC"], 
     "uri": "/Britney-Spears-Greatest-Hits-My-Prerogative/master/270902", 
     "label": ["Jive", "Zomba Video"], 
     "catno": "82876-65443-9A", 
     "year": "2004", 
     "genre": ["Electronic", "Pop"], 
     "resource_url": "http://api.discogs.com/masters/270902", 
     "type": "master", 
     "id": 270902 
    }, { 
     "style": ["RnB/Swing", "Ballad"], 
     "thumb": "http://api.discogs.com/image/R-90-2421214-1283141143.jpeg", 
     "format": ["DVD", "DVD-Video", "NTSC", "Multichannel"], 
     "country": "US", 
     "barcode": ["0 1241-41784-9 7"], 
     "uri": "/Britney-Spears-Live-From-Las-Vegas/master/271031", 
     "label": ["Jive"], 
     "catno": "01241-41784-9", 
     "year": "2002", 
     "genre": ["Electronic", "Hip Hop", "Pop"], 
     "title": "Britney Spears - Live From Las Vegas", 
     "resource_url": "http://api.discogs.com/masters/271031", 
     "type": "master", 
     "id": 271031 
    }, { 
     "style": ["Europop"], 
     "thumb": "http://api.discogs.com/image/R-90-2410806-1283122933.jpeg", 
     "format": ["DVD", "DVD-Video", "NTSC"], 
     "country": "US", 
     "barcode": ["0 1241-41704-9 1"], 
     "uri": "/Britney-Spears-Live-And-More/master/270904", 
     "label": ["Jive"], 
     "catno": "01241-41704-9", 
     "year": "2000", 
     "genre": ["Pop"], 
     "title": "Britney Spears - Live And More!", 
     "resource_url": "http://api.discogs.com/masters/270904", 
     "type": "master", 
     "id": 270904 
    }] 
} 

PYTHON:

url1 = "http://api.discogs.com/database/search?sort=year&sort_order=" 
url2 = "asc&artist=%22"+artist+"%22&track=" 
url3 = "%22"+song+"%22&format_exact=Album&type=master" 
url = url1 + url2 + url3 
print url 
request = urllib2.Request(url) 
request.add_header('User-Agent','Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)') 
request.add_header('Content-Type','application/json') 
response = urllib2.urlopen(request) 
json_raw = response.readlines() 
json_object = json.loads(json_raw[0]) 

for row in sorted(json_object['results']): #stuck here to sort on key's value... 
    print '-----------------------------start------------------------------------------' 
    print row['format'] 
    print row['id'] 
    print '-----------------------------end--------------------------------------------' 
+0

請使用正確的API函數來構建查詢字符串.. http://docs.python.org/2/library/urllib.html#urllib.urlencode – ThiefMaster

回答

1

sorted接受key參數,它做到了這一點:

from operator import itemgetter 

for result in sorted(json_object['results'], key=itemgetter('year')): 
    if 'DVD' in result['format']: 
     continue 
+0

'operator.itemgetter' – delnan

+0

@delnan:完全忘了那個。謝謝。 – Blender

+0

感謝您的幫助,現在的數據似乎按年份排序(真棒),但數據並不侷限於包含'DVD' –