なにもわからない
python3のdictのソート
↓みたいな'文字列' => 'strからintに型変換した重複もある数値' という構造のdictをラムダ式利用してvalue側でソートして出力したときに、 部分的にしかソートされないみたいな現象に悩まされたんだけど、いざ再現しようとすると全然再現しない。。。 かなり大きいデータでいくつも同じようなdictをsortして出力していて、デバッグしながらteeコマンドでリダイレクトもしていたので、そういった状況をできるだけ試したんだけど、全く問題なかった。。。 マイナーバージョンのバグだったのだろうか、今度は完全に同じコードで確認してみる
何だったんだ??
import string import random from time import sleep S = string.ascii_lowercase + string.ascii_uppercase + string.digits I = string.digits def random_str(n: int): tmp = "" for i in range(n): tmp += random.choice(S) return tmp def random_digits_str(n: int): tmp = "" for i in range(n): tmp += random.choice(I) return tmp def sort_dict(): d = {} for i in range(10): num = random.randrange(1, 300) st = random_str(10) d[st] = num num = random.randrange(1, 30) st = random_str(10) d[st] = num num = random.randrange(1, 3) st = random_str(10) d[st] = num for k,v in sorted(d.items(), key=lambda x: -x[1]): print(v, k) def sort_dict2(): d = {} for i in range(20): st = random_str(10) digit_st = random_digits_str(3) d[st] = int(digit_st) st = random_str(10) digit_st = random_digits_str(1) d[st] = int(digit_st) st = random_str(10) digit_st = random_digits_str(1) d[st] = int(digit_st) for k,v in sorted(d.items(), key=lambda x: -x[1]): print(v, k) print("------------") sleep(1) for i in range(200): # sort_dict() sort_dict2()