2016-12-18 3 views
0

タイトルを改善する方法を知っている人なら誰でも歓迎すべきものがあります。辞書リストから除外し、各項目の値が最も低い

list = [ 
    { 'id' : 1, 'value' : 1 }, 
    { 'id' : 2, 'value' : 2 }, 
    { 'id' : 1, 'value' : 2 }, 
    { 'id : 2, 'value' : 1 }, 
] 

私はkey=itemgetter('id','value')ことによってそれをソートして取得しました

list = [ 
    { 'id' : 1, 'value' : 1 }, 
    { 'id' : 1, 'value' : 2 }, 
    { 'id' : 2, 'value' : 1 }, 
    { 'id : 2, 'value' : 2 }, 
] 

今、私はフィルタリングしたい、IDごとに、それが取得するための最低値だ:

私は辞書のリストを持っています

list = [ 
    { 'id' : 1, 'value' : 1 }, 
    { 'id' : 2, 'value' : 1 }, 
] 

私の現在のソリューションは、この

のようなものです
new_list = [] 
old_id = -1 
for item in list: 
    new_id = item['id'] 
    if new_id != old_id: 
     new_list.append(item) 
     old_id = new_id 

しかし、私はフィルタ、マップ、削減、ラムダ関数とリスト内包してここに行ってクールなものをたくさん見てきましたが、私の問題にクリーンな解決策があることができれば疑問に始めましたか? idによって

+0

は 'に見てitertools.groupby'。しかし、作業しているコードであれば、次の便利な部分に移動してください。 – jonrsharpe

+1

あなたは 'new_list.append(item)'を書くつもりだと思う。 –

+0

Thanks Jim、それを編集しました:) – MrJalapeno

答えて

3

リストはidvalueによってソートされているので、あなたができるグループとID最安値持っている必要があり、各グループからの最初のアイテムを取る:

from itertools import groupby 
[next(g) for _, g in groupby(lst, key = lambda d: d['id'])] 
# [{'id': 1, 'value': 1}, {'id': 2, 'value': 1}] 
関連する問題