gpt4 book ai didi

python - 如何创建一个排序数组,其顺序与输入相关联

转载 作者:太空宇宙 更新时间:2023-11-03 21:06:45 24 4
gpt4 key购买 nike

本质上我有一个计算人的平均加权分数的函数。如果其中一个输入是姓名,前姓名 =“John Smith”,他们的最终成绩总计 = 100。如果我为另一个人再次运行此程序,他们的姓名 =“Bob Joe”,总计 = 95 并存储每一个。我如何将数字与名称相关联,以便根据总分升序排列名称。

我的预期结果是

名称顺序 = [100,95,81,55]

等级顺序 = [约翰·史密斯、鲍勃·乔、比利·基德、达姆达姆]

成绩按收到的分数顺序排列

最佳答案

有几种方法可以做到这一点。

第一个,可能也是最清楚的,是使用 listdicts并按分数键排序:

from operator import itemgetter

unsorted_data = [{'name': 'John Smith', 'score': 100},
{'name': 'Dum Dum', 'score': 55},
{'name': 'Billy Kid', 'score': 81},
{'name': 'Bob Joe', 'score': 95}]

sorted(unsorted_data, key=itemgetter('score'))

输出:

[{'name': 'Dum Dum', 'score': 55}, {'name': 'Billy Kid', 'score': 81}, {'name': 'Bob Joe', 'score': 95}, {'name': 'John Smith', 'score': 100}]

第二种是使用单个dict :

scores = {'John Smith': 100, 'Bob Joe': 95, 'Billy Kid': 81, 'Dum Dum': 55}

sorted(scores.items(), key=itemgetter(1))

输出:

[('Dum Dum', 55), ('Billy Kid', 81), ('Bob Joe', 95), ('John Smith', 100)]

在我看来,这不太直观,因为它返回 listtuples您必须按位置索引,而不是明显的字符串键。它节省了一点空间,但是您几乎不必担心优化,因为无论如何您都在使用 Python。

最后是根据zip排序:

namesOrder = [100, 95, 81, 55]
gradesOrder = ['John Smith', 'Bob Joe', 'Billy Kid', 'Dum Dum']

[name for grade, name in sorted(zip(namesOrder, gradesOrder))]

输出:

['Dum Dum', 'Billy Kid', 'Bob Joe', 'John Smith']

返回名称,这在某些情况下可能是您想要的,并且如果您的数据来自多个lists,则不需要您创建中间数据结构。 .

您也可以通过reverse=Truesorted 中的任何一个调用按降序排序,而不是默认的升序。

关于python - 如何创建一个排序数组,其顺序与输入相关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55347389/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com