def select_weighted(d):
    offset = random.randint(0, sum(d.values()) - 1)
for k, v in d.items():
    if offset < v:
        return k
offset -= v
Случайный ключ словаря Python, взвешенный по значениям