teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2020/04/24 02:39

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -66,4 +66,7 @@
66
66
  ```
67
67
  [('usa', 873), ('uk', 543), ('kenya', 477), ('china', 229), ('japan', 115), ('brazil', 89), ('rossia', 24)]
68
68
  OrderedDict([('usa', 873), ('uk', 543), ('kenya', 477), ('china', 229), ('japan', 115), ('brazil', 89), ('rossia', 24)])
69
- ```
69
+ ```
70
+
71
+ Python3.7以降をご利用の場合は、ただの辞書を使っても挿入順を保証できます。
72
+ 逆に3.6以前であればOrderedDictを使うべきでしょう。

1

追記

2020/04/24 02:39

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -35,4 +35,35 @@
35
35
  > 上の結果はどのようにソートされたものなのでしょうか?
36
36
 
37
37
  国名の1文字目(最初の文字が0文字目)の、降順。
38
- uSa > bRazil > rOssia > uK > cHina > kEnya > jApan
38
+ uSa > bRazil > rOssia > uK > cHina > kEnya > jApan
39
+
40
+ 解決策
41
+ ---
42
+ > またlambdaを使ってどのように記述すれば正しく出力されるのでしょか?
43
+
44
+ dict.itemsを利用してタプルを抜き出し、ソート後辞書に変換します。
45
+ ```Python
46
+ import collections
47
+
48
+ dct = {
49
+ "japan": 115,
50
+ "china": 229,
51
+ "brazil": 89,
52
+ "usa": 873,
53
+ "uk": 543,
54
+ "rossia": 24,
55
+ "kenya": 477
56
+ }
57
+
58
+ items_sorted = sorted(dct.items(), key=lambda x: x[1], reverse=True)
59
+ print(items_sorted)
60
+
61
+ sorted_dct = collections.OrderedDict(items_sorted)
62
+ print(sorted_dct)
63
+ ```
64
+
65
+ **実行結果** [Wandbox](https://wandbox.org/permlink/QSMXoPKhSBdlxFEt)
66
+ ```
67
+ [('usa', 873), ('uk', 543), ('kenya', 477), ('china', 229), ('japan', 115), ('brazil', 89), ('rossia', 24)]
68
+ OrderedDict([('usa', 873), ('uk', 543), ('kenya', 477), ('china', 229), ('japan', 115), ('brazil', 89), ('rossia', 24)])
69
+ ```