2011-08-05 14 views
1

辞書型で表現されたjsonデータがある場合、 'results'リストの特定の値と一致するすべての 'type'ノードを見つけるためのpysonicな方法はありますか?もちろん辞書の子孫要素によるPythonicフィルタリング

foundItems = [elem for elem in results if 'type_two' in elem['types']] 

あなたはおそらくそのような'type_two'をハードコーディングするのではなく、変数を使用します:

"results" : [ 
    { 
     "address_components" : [ 
     ... child elements ... 
     ], 
     "verified" : "some data here", 
     "geometry" : { 
     ... child elements ... 
     }, 
     "types" : [ "type_one" ] 
    }, 

    { 
     "address_components" : [ 
     ... child elements ... 
     ], 
     "verified" : "some data here", 
     "geometry" : { 
     ... child elements ... 
     }, 
     "types" : [ "type_two" ] // filter all items that match this item's value 
    }, 
    ... more elements ... 
] 

答えて

2

あなたは、リストの内包表記を使用することができます。

これは、あなたが探しているものと並んでtypesリストの他の値を許可します。代わりにif elem['types'] == ['type_two']を使用して、特定の値のみを検索することができます。

+0

多くの場合、リストの理解に比べてジェネレータ式を使用することが望ましいです。ジェネレータ式は、事前にリスト全体を作成するのではなく、繰り返し実行するときに値を見つけます。 ジェネレータ式は、リスト内包と同じように見えますが、大括弧の代わりに括弧を使用する点を除いては、 ' - (elem ['types']の' type_two 'の場合はelemが結果として得られます) '。関数への唯一の引数としてジェネレータ式を渡すと、冗長な括弧を省略することができます。 –

0
def search_type(results, search_type): 
    matching_results = [] 
    for result in results: 
     if search_type in result["types"]: 
      matching_results.append(result) 
    return matching_results 
+2

'function'はPythonキーワードではありません(PHPだと思います)、それは' def'でなければなりません。そして、単純な 'in '検索の代わりに' result "型" count(search_type)> 0'がひどい考えです。 – utdemir

+0

良い点...これをもっと調べたはずです –

関連する問題