У меня есть словарь питона, в котором значения являются списками целых чисел:Выберите произвольный элемент из «неоднородных» словаря питона
key1 -> [1, 2, 3]
key2 -> [1, 2, 3, ... 17]
key3 -> [1, 2, 3, 4, 5]
Я хочу, чтобы выбрать случайный набор (ключ, VAL) Допустима является случайным значение из списка значений (например: key2, 8). Случайный выбор должен быть однородным во всех значениях, так, например, этот метод не является равномерным:
random_key = random.choice(d.keys())
random_val = random.choice(d[random_key])
, потому что списки не являются одной и той же длиной. Я знаю длину конкатенации списков, п, поэтому мой текущий подход заключается в следующем:
idx = np.random.randint(n)
c = 0
found = False
for k in D:
for v in D[k]:
if c == idx:
found = True
do_something_with_val(k, v);
break
c += 1
if found:
break
Мой вопрос: есть ли лучший/быстрый способ сделать это?
вы контролируете установку значений в этих списках? – miraculixx
Знаете ли вы, какая будет максимальная длина списков? Или это не под вашим контролем? – Marek
Максимальная длина списков известна и не изменяется. Однако распределение элементов по спискам меняется. Например: элемент 5 можно удалить из «key2», а новый элемент 1 можно добавить к «key3», но максимальная длина списков всегда будет одинаковой. – Blackecho