2011-09-01 21 views
61

のリストから値のリストを取得:のpython私はこのような辞書のリストを持っている辞書

[{'value': 'apple', 'blah': 2}, {'value': 'banana', 'blah': 3} , {'value': 'cars', 'blah':4}] 

私はこれを行うには['apple', 'banana', 'cars']

いただきました最善の方法をしたいですか?すべての辞書を想定し

+0

1)何を試しましたか?あなたのコードを含めてください。 2)「最善」とは、この文脈では無意味な言葉です。最も良いのは、Oracleライセンス製品の最速、最小メモリ、またはほとんどの使用を意味します。私たちはあなたが「最高の」と言っていると思うものが何かを知りません。また、投稿していないコードについてはコメントできません。 –

+4

たぶん、彼はちょうどそれを行うために "pythonic"の方法であることを尋ねたかった –

+1

Mr @ S.Lott、コードがないので、SO上に非常に多くの質問がありますが、 xまたはyのために答えを投稿するのではなく、この投稿を無視するだけです。 :v何年も前。 –

答えて

129

valueキーを持っている、あなたが書くことができます(リストがl命名されたと仮定した場合)

[d['value'] for d in l] 

valueが失われる可能性がある場合、あなたは

[d['value'] for d in l if 'value' in d] 
+0

キーの欠損値を処理するには、d.get( "key_to_lookup"、 "alternate_value")を使用することもできます。それから、d [lのd.get( 'value'、 'alt')]のようになります。値がキーとして存在しない場合、単に 'alt'を返します。 – abhinav

12
[x['value'] for x in list_of_dicts] 
+0

またはdict_listのdの[d.getkey( 'value')] – rplnt

+0

@rplnt、いいえ。 ':') ' –

+0

@rpInt Um、' getkey'のようなものはありません。 'd.get( 'value')'を意味しますか?それはMichalのものではなく、@ isbadawiの2番目のリストの理解と同じです。 – agf

13

を使用することができます。ここですmap()とラムダ関数を使用して別の方法:

>>> map(lambda d: d['value'], l) 

ここで、lはリストです。 私はこの方法を "セクシー"と見ますが、リストの理解度を使ってやります。

アップデート:「の値が」キー使用として不足しているかもしれないと場合 :

>>> map(lambda d: d.get('value', 'default value'), l) 

がアップデート:私もラムダの大ファンではない、私は物事に名前を付けることを好むが...この

>>> import operator 
>>> map(operator.itemgetter('value'), l) 

私はさらに行くと、明示的に私が達成したいものを言う唯一の機能を作成します:私はこのことを念頭に置いてそれを行うだろうかある

>>> import operator, functools 
>>> get_values = functools.partial(map, operator.itemgetter('value')) 
>>> get_values(l) 
... [<list of values>] 
+0

総計!リストの理解は、ここでもっと意味を成しています。 –

+1

最初の 'map'を使用する場合、' lambda'ではなく 'operator.itemgetter( 'value')'を使用してください。 – agf

+0

+1は 'map'と' lambda'でpythonicです – rickcnagy

関連する問題