2016-04-16 10 views
0

私はで検索するには困難な辞書があります。今、私は可能な最大サイズ(メガ可能な場合)でキー=「の#text」で値を取得しようとしています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'}]}}} 

を。

この辞書をループする簡単な方法はありますか、forループをたくさん使う必要がありますか?

+0

複数の「アーティスト」エントリがあるか、最初のものだけを見ていますか? –

+0

@MartijnPietersより多くのアーティストのエントリがありますが、私は最初のものだけを探しています。 –

答えて

1

相対的な順序で辞書を定義します。与えられたartistエントリの最大画像サイズを見つけるためにmax()機能をマッピングする

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

使用:にバインドdata

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

デモを(あなたの質問に指定された辞書):

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

♦ニース!ラムダは何をしていますか? –

+1

@DriesCoppens:最大化する値を抽出する方法を 'max()'に指示します。したがって、 'artist ['image']'の各辞書について、最大化する値は 'sizemap'辞書を介した' 'size''キーの翻訳です。したがって、イメージ辞書の '' size '' 'mega' 'は他のマップされたサイズよりも高い '4'に変換されます。 –