Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python生成偏向流行字母的随机字母表的有效方法?_Python_Random - Fatal编程技术网

用Python生成偏向流行字母的随机字母表的有效方法?

用Python生成偏向流行字母的随机字母表的有效方法?,python,random,Python,Random,我想生成一个随机字母,但随机性倾向于字母的流行程度。 例如,“E”是英语字母表中最常见的字母,因此它应该具有最高的概率 我发现这可以定义一封信的流行程度 我天真的做法如下: import random popularity_dict = {'E': 21912, 'T': 16587, 'A': 14810, 'O': 14003, 'I': 13318, 'N': 12666, 'S': 11450, 'R': 10977, 'H': 10795, 'D': 7874, 'L': 7253

我想生成一个随机字母,但随机性倾向于字母的流行程度。 例如,“E”是英语字母表中最常见的字母,因此它应该具有最高的概率

我发现这可以定义一封信的流行程度

我天真的做法如下:

import random

popularity_dict =  {'E': 21912, 'T': 16587, 'A': 14810, 'O': 14003, 'I': 13318, 'N': 12666, 'S': 11450, 'R': 10977, 'H': 10795, 'D': 7874, 'L': 7253, 'U': 5246, 'C': 4943, 'M': 4761, 'F': 4200, 'Y': 3853, 'W': 3819, 'G': 3693, 'P': 3316, 'B': 2715, 'V': 2019, 'K': 1257, 'X': 315, 'Q': 205, 'J': 188, 'Z': 128}
#scraped from the given link

letter_list = []
for letter, popularity in popularity_dict.items():
    letter_list.extend([ letter] * popularity)


print(random.choice(letter_list))
我想知道是否有更有效的方法来解决这个问题

import random

popularity_dict =  {'E': 21912, 'T': 16587, 'A': 14810, 'O': 14003, 'I': 13318, 'N': 12666, 'S': 11450, 'R': 10977, 'H': 10795, 'D': 7874, 'L': 7253, 'U': 5246, 'C': 4943, 'M': 4761, 'F': 4200, 'Y': 3853, 'W': 3819, 'G': 3693, 'P': 3316, 'B': 2715, 'V': 2019, 'K': 1257, 'X': 315, 'Q': 205, 'J': 188, 'Z': 128}

print(random.choices(population=list(popularity_dict.keys()), weights=list(popularity_dict.values())))

哦,如果你需要更多的随机字母,比如说10个,只需将
k=10
添加到参数列表中。

如果你将其转换为一个概率的dict(总共1个),那么这个解决方案将有效: