2016-04-16 74 views
0

我有困难的字典来搜索:JSON字典查找

{'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'}]}}} 

现在我试图让与主要=“#text”与最大可能大小(兆如果可能的话)的值。

有没有简单的方法来循环这本字典或我需要使用大量的循环?

+0

会有多个“艺术家”参赛作品吗?或者你只看第一个作品? –

+0

@MartijnPieters会有更多的艺术家参赛作品,但我只搜索第一个作品。 –

回答

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 
+0

♦不错! lambda是做什么的? –

+1

@DriesCoppens:告诉'max()'如何提取最大化的值。因此,对于'artist ['image']'中的每个字典,最大化的值是通过'sizemap'字典翻译'size''键。因此,'size':图像字典中的'mega'被翻译为'4',其高于任何其他映射大小。 –