0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PythonとJavaScriptのsort関数における複数の項目を並び替える記述の違いについて

Last updated at Posted at 2024-08-31

PythonとJavaScriptのsort関数の違いについて

PythonとJavaScriptには、それぞれ独自の方法でリストや辞書をソートする機能があります。この記事では、特に多次元リストや辞書をソートする方法について、PythonとJavaScriptの実装を比較してみましょう。

Pythonのソート

Pythonでは、sorted関数を使用してリストや辞書をソートすることができます。sorted関数は新しいリストを返し、元のリストは変更されません。

多次元リストのソート

例えば、以下のような多次元リストをソートする場合を考えます。

data = [['きゅうり', 2, 4], ['いちご', 2, 6], ['にんじん', 2, 1], ['とうふ', 1, 0]];

このリストを第2要素と第3要素でソートするには、sorted関数とlambda関数を使用します。

sorted_data = sorted(data, key=lambda x: (x[1], x[2]))
print(sorted_data)

sorted_data = sorted(data, key=lambda x: (-x[1], x[2]))

このままだと全ての項目で昇順ソートされるが、一部のキーでは降順ソートしたい場合は、
一部の要素をマイナスとすればよい。ただし値が数値型に限るので
もし文字列も優先してsortしたい場合は、sorted関数を二回使うことになり、一番優先したい要素を先にsorted関数を用いる

辞書のソート

辞書をキーやバリューでソートする場合も、sorted関数を使用します。

score = {'kokugo': 33, 'sansuu': 85, 'eigo': 60}

# キーでソート
sorted_by_key = dict(sorted(score.items()))
print(sorted_by_key)

# バリューでソート
sorted_by_value = dict(sorted(score.items(), key=lambda item: item[1]))
print(sorted_by_value)
リスト内の辞書を複数キーでソート

リスト内の辞書を複数キーでソートする場合も、sorted関数を使用します。

item_list = [{"id": 2, "category_no": 2}, {"id": 1, "category_no": 2}, {"id": 3, "category_no": 1}]

sorted_item_list = sorted(item_list, key=lambda x: (x['category_no'], x['id']))
print(sorted_item_list)

JavaScriptのソート

JavaScriptでは、sortメソッドを使用してリストやオブジェクトをソートします。sortメソッドは元の配列を変更します。

多次元リストのソート

例えば、以下のような多次元リストをソートする場合を考えます。

let data = [['きゅうり', 2, 4], ['いちご', 2, 6], ['にんじん', 2, 1], ['とうふ', 1, 0]];

このリストを第2要素と第3要素でソートするには、sortメソッドとカスタム比較関数を使用します。

data.sort((a, b) => {
  if (a[1] === b[1]) {
    return a[2] - b[2];
  } else {
    return a[1] - b[1];
  }
});
console.log(data);

ただし少し冗長になるので、|| 論理演算子を用いて以下のように記述するのがベターである。
この場合は 先に書かれた条件が優先されてsortされる。

[...data].sort((a,b) => a[1]-b[1] || a[2]-b[2])
オブジェクトのソート

オブジェクトをキーやバリューでソートする場合、まずオブジェクトを配列に変換してからソートします。

let score = {'kokugo': 33, 'sansuu': 85, 'eigo': 60};

// キーでソート
let sortedByKey = Object.fromEntries(Object.entries(score).sort());
console.log(sortedByKey);

// バリューでソート
let sortedByValue = Object.fromEntries(Object.entries(score).sort((a, b) => a[1] - b[1]));
console.log(sortedByValue);
配列内のオブジェクトを複数キーでソート

配列内のオブジェクトを複数キーでソートする場合も、sortメソッドを使用します。

let item_list = [{"id": 2, "category_no": 2}, {"id": 1, "category_no": 2}, {"id": 3, "category_no": 1}];

item_list.sort((a, b) => {
  if (a.category_no === b.category_no) {
    return a.id - b.id;
  } else {
    return a.category_no - b.category_no;
  }
});
console.log(item_list);

まとめ

PythonとJavaScriptのソート関数は、それぞれの言語の特性に合わせて使い分けることが重要です。Pythonのsorted関数は新しいリストを返すため、元のリストを変更せずにソートを行いたい場合に便利です。一方、JavaScriptのsortメソッドは元の配列を変更するため、直接ソートを行いたい場合に適しています。どちらの言語でも、カスタム比較関数を使用することで、複雑なソート条件にも対応できます。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?