2017-11-23 5 views
0

にMongoDBからリストを取得し、それを並べ替え:リストで検索する方法を

results = list(db1.zaklad.find({"name": "cola", "stav": '+'})) 
print(a) 
sorted_results = sorted(results, key=itemgetter('weight'), reverse=True) 

Imが取得:[{'_id': ObjectId('5a13a8c396fb3488bb6a0648'), 'name': 'cola', 'weight': '3', 'url': 'goo.gl/2BgLmm', 'stav': '+', 'time_exp': datetime.datetime(2017, 11, 17, 23, 37, 31, 946000)}, {'_id': ObjectId('5a13a8bc96fb3488bb6a0647'), 'name': 'cola', 'weight': '2', 'url': 'goo.gl/2BgLmm', 'stav': '+', 'time_exp': datetime.datetime(2017, 11, 17, 23, 37, 31, 946000)}, {'_id': ObjectId('5a13a8ca96fb3488bb6a0649'), 'name': 'cola', 'weight': '2', 'url': 'goo.gl/2BgLmm', 'stav': '+', 'time_exp': datetime.datetime(2017, 11, 17, 23, 37, 31, 946000)}

このリストから、私は例から、上記(すべての非繰り返し重みを取得したい:3, 2 )。

このリストの検索方法は? dict(enumerate(results))で辞書をやり直すのは良いですか?あなたの助けのための

Thxを

答えて

0

リストがすでにソートされている場合は、このアイテムの重さを覚えていて、残りの項目を反復処理、それにsorted_resultsの第1の重みを置く、新しいリストを作成:

の場合アイテムは記憶された重みと同じ重みを持ち、それが無視され、別の重みがある場合はそれを新しいリストに追加し、前の重みの代わりに新しい重みを記憶する。

0

は重み

weights = [dic["weight"] for dic in results] 

はあなたが結果から、非繰り返し重み値で検索したい場合は

set(weights) 
0

を設定するために変換することにより、重複を削除得ます。

from collections import OrderedDict 

ordered_results = OrderedDict({k['weight']:k for k in sorted(results, key=lambda x:x['weight'], reverse=True)}) 

あなたが注文した結果を得ることができます:

OrderedDict([('3', {'stav': '+', 'name': 'cola', 'weight': '3', 'url': 'goo.gl/2BgLmm', 'time_exp': datetime.datetime(2017, 11, 17, 23, 37, 31, 946000), '_id': ObjectId('5a13a8c396fb3488bb6a0648')}), ('2', {'stav': '+', 'name': 'cola', 'weight': '2', 'url': 'goo.gl/2BgLmm', 'time_exp': datetime.datetime(2017, 11, 17, 23, 37, 31, 946000), '_id': ObjectId('5a13a8ca96fb3488bb6a0649')})]) 

あなたは '重量' の値で値を得ることができる '3' ordered_result使用して[ '3']

関連する問題