JavaScriptで、私は2つ以上のキーでdicsのリストをソートしようとしていましたが、問題がありました。ソート後javascript:複数の(2つ以上の)キーでdictsのリストをソート
hits = [
{'key1': 'c', 'key2': 'c1', 'key3': 10},
{'key1': 'a', 'key2': 'c1', 'key3': 10},
{'key1': 'b', 'key2': 'c1', 'key3': 10}
]
//sorting by two keys
hits.sort(function(a,b) {
return a.key2 != b.key2? (a.key2 < b.key2? -1 : 1) :
a.key3 - b.key3 });
、ヒット[0]キー1は、まだ「C」である、と私はそれが私が第三でソートしなければならない意味の「A」、なりたいです。
PS:key2とkey3の値は同じで、私の実際のdicsのリストには、key2とkey3がこの例とは違う他のdicsがあるため、key1からまっすぐに並べ替えていません。 Pythonで
私は単にするだろう:
hits.sort(key=itemgetter('key2', 'key3',"key1"))
それは小さなテストのために動作しますが、私は多くのDICSでリストをしようとすると、結果は意味がありません。ここで
は、データの一部です:
Key 2 Key3 key1
chr1 11 chr1_K761
chr1 11 chr1_K892
chr2 10 chr2
関与する他のキーがあります。ここでは
Key 2 Key3 key1
chr1 11 chr1_K892
chr1 11 chr1_K761
chr2 10 chr2
は、それが
Key 2 Key3 key1
chr2 10 chr2
chr1 11 chr1_K892
chr1 11 chr1_K761
をソートした後、私はそれがあるべきだと思うどのように見えるかです私は3つのキーで注文しているので、私は思っています
働いたソリューション:
hits.sort(function(a, b) {
if(a.key2 < b.key2)
return -1;
if(a.key2 > b.key2)
return 1;
if(a.key3 < b.key3)
return -1;
if(a.key3 > b.key3)
return 1;
if(a.key1 < b.key1)
return -1;
if(a.key1 > b.key1)
return 1;
return 0;
});
それは3 dicsの小さなリストのために働いたが、私は多くのキーとdicsで私の実際のケースで試したとき、それは動作しませんでした。私は最初の投稿に詳しい説明を追加しました – user3780518
'>'を '<'に変換しましたか?この最後のコードスニペットを同じ入力で実行すると、更新したと思われるシナリオが得られます。 –