のみ最初の結果、バニラを返しリストや辞書
このためリストの内包を使用することができます。
[d['key2'] for d in data if d['key1'] == 'value1']
# \___ ___/ \_____ _____/ \___________ __________/
# v v v
# yield iterator filter
は(コメントはそれが簡単な構文を理解するために作るためにのみ使用されます)
だから我々はd
でdata
を反復処理する反復子です。 d['key1'] == 'value1'
がある場合は、d['key2']
を結果リストに追加します。
パンダ
パンダは、(大)データフレームを処理することを可能にするパッケージです。データフレームは非常に柔軟性がありますが、基本的な(したがって完全には一致しない)定義は、各行が同じ名前の列を持つ2次元表と見なすことです。あなたがパンダをインストールすることができます。
pip3 install pandas
(またはpython-2.7ため、pip install pandas
)
次の我々はそれをインポートしてパンダを使用することができます。
:
import pandas as pd
次は我々がデータフレームを作ることができます
df = pd.DataFrame(data)
これは次のようになります。
>>> df
key1 key2
0 value1 value2
1 value3 value4
2 value1 value5
今、我々がkey1
が'value1'
あるSeries
key2
の値を取得することができます。
df[df['key1'] == 'value1']['key2']
これは生産:
>>> df[df['key1'] == 'value1']['key2']
0 value2
2 value5
Name: key2, dtype: object
をここでは、もちろん、単純な結果のために多くの仕事です、パンダは大規模なデータセットに対して妥当な時間に複雑なクエリを実行するために使用できます。
今日この問題に出くわしました(この質問が掲載される前にこの解決策が指摘されました)。複数のマップ/フィルタを使用して計画していたものよりもはるかにエレガントな/ピジョンソニックソリューションです。 –
@matrim_c:あなたはウェルカム:) –
ありがとうウィレム!この構文データ['key1' == 'value1'] ['key2']はどうでしょうか?私はそれが非常にセクシーであることがわかります、この基準に答えるすべての行を返す方法はありますか? – Maxime