У меня есть следующий скрипт случайного выбора:
import random
length_of_list = 200
my_list = list(range(length_of_list))
num_selections = 10
numbers = random.sample(my_list, num_selections)
Он просматривает список заранее определенного размера и случайным образом выбирает 10 чисел.Есть ли способ запустить этот раздел 500 раз, а затем получить 10 самых популярных номеров?Я думал, что смогу ввести цифры в словарь, а затем получить первые 10 цифр.Пока что я сделал следующее:
for run in range(0, 500):
numbers = random.sample(my_list, num_selections)
for number in numbers:
current_number = my_dict.get(number)
key_number = number
my_dict.update(number = number+1)
print(my_dict)
Здесь я хочу, чтобы код взял текущее число, назначенное этой клавише, а затем добавил 1, но мне не удалось заставить его работать.Кажется, что ключ для обновления словаря должен быть именно этим ключом, не может вставлять переменную. Кроме того, я думаю, что этот вложенный цикл может быть не таким эффективным, так как мне приходится запускать это 500 раз 1500 раз 23 ... такЯ беспокоюсь о производительности.Если у кого-то есть идея, что мне следует попробовать, это было бы здорово!Спасибо
РЕШЕНИЕ :
import random
from collections import defaultdict
from collections import OrderedDict
length_of_list = 50
my_list = list(range(length_of_list))
num_selections = 10
my_dict = dict.fromkeys(my_list)
di = defaultdict(int)
for run in range(0, 500):
numbers = random.sample(my_list, num_selections)
for number in numbers:
di[number] += 1
def get_top_numbers(data, n, order=False):
"""Gets the top n numbers from the dictionary"""
top = sorted(data.items(), key=lambda x: x[1], reverse=True)[:n]
if order:
return OrderedDict(top)
return dict(top)
print(get_top_numbers(di, n=10))