2016-05-30 6 views
-1

複数のルールに基づいて注文する必要があるdictオブジェクトの配列があります。複数のキー値と比較ルールに基づいてdictオブジェクトを注文する

これはサンプルdictsがどのように見えるかです:

dict1 = {'key1': '85', 'key2': '163', 'key3': '3'} 
dict2 = {'key1': '3', 'key2': '23', 'key3': '1'} 
dict3 = {'key1': '88', 'key2': '153', 'key3': '6'} 

そして、これらのルールは、順序のために従うべきである:

key1 - the higher value is the better 
key2 - the higher value is the better 
key3 - the lower value is the better 

だから私のリストを注文すると、このようにする必要があります後:

dict_list = [dict1, dict3, dict2] 

#dict1 is the first obj, because it has the biggest key1 + key2 value and the 2. lowest key3 value 

dict_list値によるオブジェクト(希望の結果):

# value name - high values (key1 + key2) - low values (key3) 
1. dict1     248      3 
2. dict3     241      6 
3. dict2     26      1 
key1から

key2私は比較のための絶対数を作成することができますが、key3はまだそこだろうと私はそれのために同じロジックを使用することはできませんので、残念ながら、私はそれを行うことはできません。

私の質問:注文に独自のルールを定義することは可能ですか?このようなタスクのPython関数はありますか?

+0

{key1:2、key3:1}、{key1:1、key3:2}のときはどうしますか? –

+0

キー機能で独自の注文を定義することができます。https://wiki.python.org/moin/HowTo/Sortingを参照してください。 – pvg

答えて

2

正しく理解したら、キー1とキー2を追加し、キー3を減算し、この数値を高い順に並べ替えるといいでしょうか?その場合は、次の操作を行います。それはローからハイにそれらを発注するため

list_dicts = sorted(list_dicts, key=lambda x:int(x['key3'])-int(x['key2'])-int(x['key1'])) 

はこれが何をするか、整数に自分の価値観をマッピングし、キー3の値からキー1、キー2の値を引くです。オリジナルの辞書を希望の順序で保持します。

関連する問題