JSON字典查找

时间:2016-04-16 16:16:25

标签: python json dictionary

我有一个难以搜索的词典:

{'results': 
      {'opensearch:itemsPerPage': '1', 'artistmatches':
                {'artist': [{'streamable': '0', 'image':
                        [{'#text': 'http://img2-ak.lst.fm/i/u/34s/d593a102f004491689bc7e07d8fb09ba.png', 'size': 'small'},
                         {'#text': 'http://img2-ak.lst.fm/i/u/64s/d593a102f004491689bc7e07d8fb09ba.png', 'size': 'medium'},
                         {'#text': 'http://img2-ak.lst.fm/i/u/174s/d593a102f004491689bc7e07d8fb09ba.png', 'size': 'large'},
                         {'#text': 'http://img2-ak.lst.fm/i/u/300x300/d593a102f004491689bc7e07d8fb09ba.png', 'size': 'extralarge'},
                         {'#text': 'http://img2-ak.lst.fm/i/u/d593a102f004491689bc7e07d8fb09ba.png', 'size': 'mega'}],
                        'listeners': '3251959', 'name': 'Michael Jackson'}]}}}

现在我正在尝试使用key ='#text'获取最大可能值(如果可能的话,Mega)。

是否有一种简单的方法可以循环遍历这个字典,还是需要使用大量的for循环?

1 个答案:

答案 0 :(得分:1)

定义具有相对排序的字典:

sizes = ('small', 'medium', 'large', 'extralarge', 'mega')
sizemap = {size: value for value, size in enumerate(sizes)}

将该地图与max()功能一起使用,以查找给定artist条目的最大图像尺寸:

for artist in data['results']['artistmatches']['artist']:
    image = max(artist['image'], key=lambda i: sizemap[i['size']])
    image_url = image['#text']

演示(data绑定到问题中指定的字典):

>>> for artist in data['results']['artistmatches']['artist']:
...     image = max(artist['image'], key=lambda i: sizemap[i['size']])
...     image_url = image['#text']
...     print(image_url)
...
http://img2-ak.lst.fm/i/u/d593a102f004491689bc7e07d8fb09ba.png