常规:
我需要帮助找到一种在Python中获取多维字典中前 N
个最大值的方法。例如:
things = {
"car": { "weight": 100 },
"apple": { "weight": 1 },
"spanner": { "weight": 10 }
}
在这种情况下,我想要在字典中找到权重最高的两个项目,具体来说是这些项目的键。因此,在这种情况下,它应该返回
["car", "spanner"]
实际问题:
注意:这是我第一次尝试遗传算法,所以可能我做得不正确。完全不正确。
作为一个英国人,我正在寻找我能想象到的最好的茶杯,因此我编写了一个Python程序,生成10个随机的茶杯,然后使用自然选择找出其中前5个,依此类推。
一杯茶被建模为一个Python字典,有5个键:
{
"brew_time": Some Number,
"milk": Some Number,
"sweeteners": Some Number,
"fitness": Some Number (This is what I'm interested in),
"name": Some randomly generated name (Doesn't really matter)
}
我的程序生成的一杯茶看起来会像这样:
{'brew_time': 2.0, 'milk': 0.5, 'sweeteners': 3.0, 'name': 'bold cup', 'fitness': 0}
然后它会生成10杯茶,存储在teas
变量中。以下是该输出的示例:
{0: {'brew_time': 2.0, 'milk': 0.4, 'sweeteners': 1.0, 'name': 'unafraid brew', 'fitness': 0}, 1: {'brew_time': 3.0, 'milk': 0.5, 'sweeteners': 3.0, 'name': 'fire-eating blend', 'fitness': 0}, 2: {'brew_time': 2.0, 'milk': 0.6, 'sweeteners': 2.0, 'name': 'fearless drink', 'fitness': 0}, 3: {'brew_time': 2.0, 'milk': 0.9, 'sweeteners': 3.0, 'name': 'fire-eating blend', 'fitness': 0}, 4: {'brew_time': 2.0, 'milk': 0.8, 'sweeteners': 2.0, 'name': 'fire-eating cuppa', 'fitness': 0}, 5: {'brew_time': 3.0, 'milk': 0.3, 'sweeteners': 1.0, 'name': 'fire-eating drink', 'fitness': 0}, 6: {'brew_time': 4.0, 'milk': 0.7, 'sweeteners': 2.0, 'name': 'dauntless medley', 'fitness': 0}, 7: {'brew_time': 3.0, 'milk': 0.3, 'sweeteners': 2.0, 'name': 'dauntless cuppa', 'fitness': 0}, 8: {'brew_time': 3.0, 'milk': 0.9, 'sweeteners': 2.0, 'name': 'epic drink', 'fitness': 0}, 9: {'brew_time': 2.0, 'milk': 0.4, 'sweeteners': 2.0, 'name': 'gusty drink', 'fitness': 0}}
我现在正在尝试编写一个名为selection()
的函数,它将从字典中删除5种最不适合的茶叶。(一种茶叶的适应性由我设置,使用rank_tea()
函数,该函数接受一个数组并设置所有茶叶的适应性,这是一个介于0-1之间的数字,表示茶叶的质量)
这是我目前的代码,但它不起作用:
def selection():
teaCopy = teas.copy()
fitnesses = []
for i in range(0, len(teaCopy)):
fitnesses.append(teas[i]["fitness"])
print(fitnesses)
max_fitnesses_indicies = sorted(range(len(fitnesses)), key=lambda x: fitnesses[x])
print(max_fitnesses_indicies)
len_array = []
print(len_array)
for i in range(0, len(teas)):
len_array.append(i)
to_be_del = list( set(max_fitnesses_indicies) - set(len_array) )
print(to_be_del)
这是完整的代码。 很抱歉问题有点长,我只是不想遗漏任何内容。任何帮助都将不胜感激。