2016-04-16 68 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',其高於任何其他映射大小。 –