0
dave = [{'date':'12/10/12','time':'09:12','created_by':'adam','text':'this'},
        {'date':'28/09/11','time':'15:58','created_by':'admin','text':'that'},
        {'date':'03/01/10','time':'12:34','created_by':'admin','text':'this and that'}]

で見つかった値のリストを取得する方法created_by。(例['adam','admin'])

4

4 に答える 4

5

リスト内包表記はうまく機能します:

[ x['created_by'] for x in dave if 'created_by' in x ]

'created_by'に含まれる各 dict のキーであることが絶対に確実な場合は、その部分を省略daveできます。その場合、そのキーが欠落している場合は a が発生します。if 'created_by' in xKeyError

もちろん、一意の値が必要な場合は、順序が重要かどうかを判断する必要があります。順序が重要でない場合は、 asetを使用します。

set(x['created_by'] for x in dave if 'created_by' in x)

順序が重要な場合は、この古典的な質問を参照してください

于 2012-10-30T12:24:52.317 に答える
1

セットに入れて、リストに戻る...

list(set(d['created_by'] for d in dave))
于 2012-10-30T12:29:02.607 に答える
1

factory を使用setして一意の値のみを返すことができます。その後、list使用しているlistfactory を次のように取得できますset

>>> set(x['created_by'] for x in dave)
set(['admin', 'adam'])

>>> list(set(x['created_by'] for x in dave))
['admin', 'adam']
于 2012-10-30T12:28:14.060 に答える
0

リスト内包表記の進歩は、'created_by' を持たない可能性のある項目に対して if 条件を使用することです。乱雑なデータを扱う場合、これが必要になることがよくあります。

list(set(x['created_by'] for x in dave if 'created_by' in x))
>>> ['admin', 'adam']
于 2012-10-30T13:55:46.577 に答える