2017-10-11 2 views
1

JSONファイルを処理しようとしています。ファイル内に含まれるが、このようなlinksのリストです:特定のキーと値のペアを持つリストからdictエントリを返すPythonの方法ですか?

"links": [ 
    { 
     "href": "https://specificURL/incidents", 
     "rel": "canonical" 
    }, 
    { 
     "href": "https://specificURL/metadata-catalog/incidents", 
     "mediaType": "application/schema+json", 
     "rel": "describedby" 
    }, 
    { 
     "href": "https://specificURL/incidents?limit=10&fromId=11", 
     "rel": "next" 
    }, 
    { 
     "href": "https://specificURL/incidents-search-form", 
     "rel": "search-form" 
    }, 
    { 
     "href": "https://specificURL/incidents?limit=10", 
     "rel": "self" 
    } 
] 

私はリストをループすることによって、次のリンクを引っ張ってんだけど、そうするより「神託」の方法があります場合、私は好奇心が強いです。コードの作業

for link in responseData['links']: 
    if link['rel'] == "next": 
     print(link['href']) 

は、これは本当にこれを行うための最も神託の方法は何ですか?

+6

このコードはPythonicです。リストを作成したい場合は、リスト内包を使用することができますが、for-loopsは完全にpythonic *です。これは配列ではなく、これは 'list'です –

答えて

3

relで各エントリを索引付けするためにデータ構造を再編成することができます。これは、変換パスを実行することを犠牲にしてエントリにアクセスするより自然な方法を提供するでしょう。

hrefs_by_rel = {link['rel']: link['href'] for link in responseData['links']} 
print(hrefs_by_rel['next']) 

(それはまた、重複したエントリを廃棄する原因となる。)

私は必ずしもそれより良いスタイル考えていないのにあなた、リスト内包に明示的なループを変更することができます。

rel_hrefs = [link['href'] for link in responseData['links'] if link['rel'] == "next"] 
関連する問題