【发布时间】:2019-08-28 16:24:23
【问题描述】:
我有以下随机选择脚本:
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))
【问题讨论】:
标签: python python-3.x list dictionary random