tombo2-progress’s diary

できるだけ毎日1時間を切り取ってここに晒す。誤字脱字気にしない。日本語が崩壊するのも気にしない。最終的にまとめて本ブログに書く

なにもわからない

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()