我已经制作了一系列功能,可以根据平均表现和标准偏差随机生成数十人。 我编写了一行代码,它从前面的函数中获取输出,并按照分数的顺序输出人员的姓名:
sortedlistofnames = [(value) for index, value in enumerate(odsailorscores)]
odsailorsscores是包含人名和已订购分数的输出。
输出如下:
['Bob', 'Alice', 'Clare', 'Dennis', 'Eva']
我需要做的是重复这6次并且对于每组随机值而不是仅仅输出名称列表6次我需要将列表中的每个位置编号并添加到另一个字典中。
例如,条目最终会如此:
[('Alice', [3, 2, 2, 2, 1, 2]), ('Eva', [4, 4, 5, 4, 5, 5]), ('Clare', [1, 5, 3, 3, 3, 1]), ('Dennis', [5, 3, 4, 5, 4, 4]), ('Bob', [2, 1, 1, 1, 2, 3])]
然后将其放回我之前的一个功能中,最终只是一个有序名称列表,具体取决于他们在6场比赛中的整体表现。
如果它有助于产生随机分数的功能:
def scoreGen(input_dict):
generatedResults = []
for key in input_dict:
x, y = input_dict[key]
random_number = gauss(x, math.sqrt(y))
generatedResults.append((key, random_number))
generatedResults = OrderedDict(sorted(generatedResults, key=lambda t: t[1], reverse=True))
return generatedResults
,输出如下:
OrderedDict([('Clare', 103.77155669358106), ('Bob', 100.7887661842925), ('Alice', 100.0), ('Eva', 91.8316903347015), ('Dennis', 90.0)])
编辑:
对于我所知道的事情似乎存在一些困惑,因为我写得非常糟糕。
基本上我需要一个可以采用INPUT的函数,它看起来像这样:
OrderedDict([('Clare', 103.77155669358106), ('Bob', 100.7887661842925), ('Alice', 100.0), ('Eva', 91.8316903347015), ('Dennis', 90.0)])
这个输入是来自另一个函数,它带有一个字典,其中包含每个赛车的名称,并且每个都具有它们的平均性能和它们的标准差(这个函数如上所示),这里的输入是一个这样的随机例子使用这些值为每个赛车生成得分。
该函数必须能够运行6次并创建一个如下所示的字典/列表:
[('Alice', [3, 2, 2, 2, 1, 2]), ('Eva', [4, 4, 5, 4, 5, 5]), ('Clare', [1, 5, 3, 3, 3, 1]), ('Dennis', [5, 3, 4, 5, 4, 4]), ('Bob', [2, 1, 1, 1, 2, 3])]
这样就可以将它输回到一个函数(我已经写过)中,它给出了总体输出:
['Bob', 'Alice', 'Clare', 'Dennis', 'Eva']
根据他们在6场比赛中的得分,这是他们的位置。
答案 0 :(得分:0)
如果我理解正确,你可以从一个字典映射开始,从字典名称映射到运行速度的均值和方差。您想要模拟几个种族的结果,并生成从名称到种族结果列表的字典映射(例如[1,2,1]
表示该人在两场比赛中最快,在另一场比赛中第二快)。
构建所需的最终输出字典应该很容易。完全不需要将有序字典转换为其键列表,就像您在第一个代码块中所做的那样。相反,您可以在迭代时直接使用index
来自enumerate
的{{1}}:
result_dict = collections.defaultdict(list)
for _ in range(number_of_races_to_simulate):
race_result = scoreGen(input_dict)
for place, racer in enumerate(race_result, start=1):
result_dict[racer].append(place)
结果看起来很像你想要的输出,只是作为defaultdict
而不是2元组的列表(但如果你愿意,你可以通过使用字典' s {{{{{{{ 1}}方法)。
请注意,如果您不需要代码中其他任何地方的模拟竞赛中的运行速度值,您可以让items
返回一个简单的有序竞赛列表,而不是更复杂的{ {1}}带有无用的值(上面的代码根本不需要改变):
scoreGen