プログラミング初学者です
https://www.hackerrank.com/challenges/most-commons/problem
この問題を解いていて
python
1from collections import OrderedDict 2 3user = sorted(input()) 4counter = OrderedDict() 5 6for i in user: 7 if i in counter: 8 counter[i] += 1 9 else: 10 counter[i] = 1 11 12n = 0 13for k, v in sorted(counter.items(), key=lambda x:x[1], reverse=True): 14 n += 1 15 if n > 3: 16 break 17 else: 18 print(k, v)
まずこのように解きました
forループの部分をCounter()に代えようと考え
python
1from collections import Counter 2 3user = sorted(input()) 4counter = Counter(user) 5 6n = 0 7for k, v in sorted(counter.items(), key=lambda x:x[1], reverse=True): 8 n += 1 9 if n > 3: 10 break 11 else: 12 print(k, v)
とこのように変えたのですが、outputの順番が同じ回数のもの同士で変わってしまいます
何故順番が安定しないのか、また何故最初のコードは順番が固定されるのか
もし後者のコードの順序を固定させるにはどのような方法が考えられるのか
教えていただきたいです
正直OrderdDict()の理解が浅いのでもしそれが関係しているなら解説いただけるとありがたいです
よろしくお願いします
この質問の投稿者はすでに退会しているため、質問者からの返信がない点にご留意ください。
回答1件
この質問の投稿者はすでに退会しているため、質問者からの返信やベストアンサーの選定がない点にご留意ください。
あなたの回答
tips
プレビュー
退会済みユーザー
2017/11/01 07:47
2017/11/01 07:49
退会済みユーザー
2017/11/01 07:53