2016-12-11 3 views
0

私は5つの要素を持つ辞書のリストを持っています。リストの各dictの2つの要素に基づいてこのリストを並べる必要があります。 2つの要素は3つの値をとることができます。dictのいくつかの要素に基づいてdictのリストを整えます

はここに例を示します。

list = [{ 'm' : '3', 'n', : '3', 'o' : '7', 'p' : '3'}, { 'm' : '5', 'n', : '2', 'o' : '7', 'p' : '1'}, { 'm' : '3', 'n', : '1', 'o' : '7', 'p' : '1'}, { 'm' : '3', 'n', : '3', 'o' : '7', 'p' : '2'}] 

ので、リストの順序は、2つの要素Nと3つの値(1,2及び3)を取ることができ、Pに基づいている:nおよびpはそれらの1である場合 1。要素が最初に配置される必要があります。 2. n = 1かつp = 2の場合、次に配置されます。 3. n = 1かつp = 3の場合、それらは次に配置されます。 4. p = 1およびn =次のように配置される。 5.最後に、p = 1およびn = 3の場合、それらは次のように配置される。 6.最後はpであり、nは3である。

最終的なリストは、この場合には、次のようになります。

final_list = [{ 'm' : '3', 'n', : '1', 'o' : '7', 'p' : '1'}, { 'm' : '5', 'n', : '2', 'o' : '7', 'p' : '1'}, { 'm' : '3', 'n', : '3', 'o' : '7', 'p' : '2'}, { 'm' : '3', 'n', : '3', 'o' : '7', 'p' : '3'}] 

いくつかのいずれかで私は、このための最善の解決策を与えることができます。

答えて

2

リストを特定の順序にするには、sorted()組み込み関数またはlist.sort()メソッドを使用しました。異常な注文を指定するには、いずれかの関数にkey=引数を使用します。

result = sorted(list, key=lambda x: (x['n'], x['p'])) 

脇に:組み込みタイプの名前を変数名として使用しないでください。そうすることは後で混乱につながる可能性があります。

プログラム例:

list_ = [{ 'm' : '3', 'n' : '3', 'o' : '7', 'p' : '3'}, 
     { 'm' : '5', 'n' : '2', 'o' : '7', 'p' : '1'}, 
     { 'm' : '3', 'n' : '1', 'o' : '7', 'p' : '1'}, 
     { 'm' : '3', 'n' : '3', 'o' : '7', 'p' : '2'}] 

final_list = [{ 'm' : '3', 'n' : '1', 'o' : '7', 'p' : '1'}, 
       { 'm' : '5', 'n' : '2', 'o' : '7', 'p' : '1'}, 
       { 'm' : '3', 'n' : '3', 'o' : '7', 'p' : '2'}, 
       { 'm' : '3', 'n' : '3', 'o' : '7', 'p' : '3'}] 

result = sorted(list_, key=lambda x: (x['n'], x['p'])) 
assert result == final_list 
+0

nおよびpは数字ものではないですか? – pynew

+0

'n'と' p'はあなたの例では数字ではありません。彼らは文字列です。型にかかわらず、 'key'関数の結果は' <'演算子を使用して比較されます。 –

関連する問題