由密钥值排序JSON数据(Sorting JSON data by keys value)

2019-08-02 21:02发布

我目前从discogs API(MP3标签数据)取得JSON数据,并希望通过该键的值对结果进行排序。 在这种情况下,我想获得一个枪炮玫瑰的歌曲数据和输出具有1988年的第一个,而数据实际上已经从1987年的纪录我如何排序这个数据,这样我可以通过获取到排序的数据今年(olderst到最新)。 通过任一键或值,但低于各种各样的代码,那不是我故意的就搞定了。 请帮忙。

import json
import urllib2
request = urllib2.Request('http://api.discogs.com/database/search?sort=year&sort_order=asc&artist=%22Guns+N%27+Roses%22&track=%22Sweet+Child+O%27+Mine%22&format_exact=Album&type=master')
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 json_object['results']:
    try:
        from operator import itemgetter
        for k, v in sorted(row.items(), key=itemgetter(0)):
            print k, v
    except KeyError: 
        pass

Answer 1:

你可以使用列表理解和sorted()函数如下:

# filter  json_object['results']  first, as some of the items are missing the key 'year'

In [33]: results = [x for x in json_object['results'] if 'year' in x]

In [34]: sorted(results, key=lambda x: x['year'])

要么 :

In [79]: from operator import itemgetter

In [80]: sorted(results, key=itemgetter('year'))


Answer 2:

要排序的词典列表,使用methodcaller要对其进行排序的关键; 要排序的结果列表,而不是包含字典。 此外,一些条目没有一年,这可能导致错误:

from operator import methodcaller

for row in sorted(json_object['results'], key=methodcaller('get', 'year', None)):
    # process the row dictionary

methodcaller定义基本上都会做一个entry.get('year', None)在每个条目json_object['results']sorted方法进行排序的值。

应该使用readlines()来读取你的JSON响应,它会误解释换行。 让json库做的,而不是读(注意.load()没有s末):

response = urllib2.urlopen(request)
json_object = json.load(response)


文章来源: Sorting JSON data by keys value