回答編集履歴
1
質問を受けて追記
test
CHANGED
@@ -2,3 +2,32 @@
|
|
2
2
|
|
3
3
|
クイックソートの方を、「dictのリストを受け取って、そのdictの指定されたキーの順に並べ替える」というものに変更すればいいのではないかと思います。
|
4
4
|
それほど大きな修正にはならないと思いますよ。
|
5
|
+
|
6
|
+
---
|
7
|
+
質問を受けて追記します。
|
8
|
+
|
9
|
+
ポイントは、今回比較したいのは、リストに入っているものそのものでなくて、その要素の1つであることです。
|
10
|
+
|
11
|
+
まず、quick_sort ()関数は、中に入っている数値の比較をしていないので、そのままでOKです。
|
12
|
+
1箇所している比較は、リストのインデックスですね。
|
13
|
+
|
14
|
+
実際に入れ替えをしているのは partition()関数の方ですね。
|
15
|
+
```python
|
16
|
+
def partition(nums, beginning, ending):
|
17
|
+
i = beginning - 1
|
18
|
+
pivot = nums[ending]
|
19
|
+
for j in range(beginning, ending):
|
20
|
+
if nums[j] <= pivot:
|
21
|
+
i += 1
|
22
|
+
nums[i], nums[j] = nums[j], nums[i]
|
23
|
+
nums[i + 1], nums[ending] = nums[ending], nums[i + 1]
|
24
|
+
return i+1
|
25
|
+
```
|
26
|
+
ここで、 iとjは インデックスですから、そのままでいいのですね。
|
27
|
+
この中で比較している場所が1箇所、「nums[j] <= pivot」これです。このときの、nums[j] はリストの要素ですから、たとえば、{"NAMAE":"A ","KOKUGO":80,"SUGAKU":95, "GOUKEI", 175}のようなdictです。これそのものを比較したいものではありませんよね。 比較したいのは、さらにこの中の"GOUKEI"の値のはずです。なのでここは、「if nums[j]["GOUKEI"] <= pivot:」 としなければなりません。
|
28
|
+
また、ここで比較しているpivotは、この前で値を入れていますが、ここも「 pivot = nums[ending]["GOUKEI"]」のように目的の値を使うようにします。
|
29
|
+
基本的にこれで済むはずです。
|
30
|
+
他の部分も含めて考えてみてください。
|
31
|
+
|
32
|
+
さらに、ここでは、"GOUKEI"を直接使いましたが、関数の引数で受け取るようにして、quick_sort関数でも受け取るようにしてやれば、国語の成績でも、算数の成績でも並べ替えられるようにできますね。
|
33
|
+
|