2016-04-15 11 views
1

内でこのからリストと配列を解析する簡単な方法があります:これに配列の抽出値を簡素化する方法

data = [{'id': '1456', 'type': 'hotel', 'money': '123'}, 
{'id': '3215', 'type': 'appartment', 'rooms': '2', 'toilet': '1'}, 
{'id': '3213', 'type': 'hotel', 'money': '999'}] 

hotel = ['123, '999'] 

私はdata配列から抽出したいですtypeホテルのお金の価値と1つの配列にすべてを追加します。

私は、ループを作成しないように望んでいた、そしてそれを反復して、お金と呼ばれるkeyがあるかどうかをチェックします。もしそうなら、それを抽出してhotel配列に追加します。

hotels = [d['money'] for d in data if d['type'] == 'hotel'] 

これは効果的data配列に目を通すとdとして各辞書を抽出します:

ええ、あなたがlist comprehensionを使用することができます

答えて

3

..私は推測する、Python用ビット冗長と思われますタイプが'hotel'ある場合にのみ得られた配列にd['money']を加えます。

+0

あなたのすべてに感謝:)! – waas1919

1

使用list comprehensionその

のためのリストの内包あなたが別のリストをもとリストを構築することを可能にし、あなたが必要なだけの値を選択するための条件を使用することができます。

list = [x['money'] for x in data if x['type'] == 'hotel'] 
1

もっと機能的なスタイルは、toolzライブラリのようなものです。

http://toolz.readthedocs.org/en/latest/api.html#toolz.itertoolz.pluck

リスト内包の仕事が、LINQ

+1

あなたは正しい、LINQとリストの内包表記は基本的に同じものであることを理解できますか?実際、[この質問](http://stackoverflow.com/questions/130898/introduction-to-c-sharp-list-comprehensions)は、 "C#list comprehensions"の検索結果の最初の結果です。 –

+0

@AlexVanLiewは、彼らはいくつかの同様のことを行うが、彼らは同じではありません。ネストされたクエリを実行する必要がある場合、LINQはより簡潔であり、うまく機能します。 LINQではグループ化などもより自然に行われます –

1

Pandasアプローチのようなものと比較すると、私は、彼らは非常に醜い見つける:

In [15]: df = pd.DataFrame(data) 

In [16]: df 
Out[16]: 
    id money rooms toilet  type 
0 1456 123 NaN NaN  hotel 
1 3215 NaN  2  1 appartment 
2 3213 999 NaN NaN  hotel 

In [17]: df.ix[df.type == 'hotel'] 
Out[17]: 
    id money rooms toilet type 
0 1456 123 NaN NaN hotel 
2 3213 999 NaN NaN hotel 

In [18]: df.ix[df.type == 'hotel', 'money'] 
Out[18]: 
0 123 
2 999 
Name: money, dtype: object 

In [19]: df.ix[df.type == 'hotel', 'money'].tolist() 
Out[19]: ['123', '999'] 

ワンライナー:

In [20]: pd.DataFrame(data).ix[df.type=='hotel', 'money'].tolist() 
Out[20]: ['123', '999'] 
1

機能的なアプローチは、SOMを見えるかもしれません以下のようなething:

filter(len, (d.get('money', '') for d in data)) 

dict.get部分は、それが存在しない場合は、空の文字列を返す、各辞書からmoney値を取得します。次に、filterを使用して空の文字列をすべて削除します。

関連する問題