为了账号安全,请及时绑定邮箱和手机立即绑定

如何创建一个排序数组,其订单与输入相关联

如何创建一个排序数组,其订单与输入相关联

慕码人8056858 2021-12-16 16:10:25
本质上,我有一个计算人的平均加权分数的函数。如果其中一个输入是姓名,ex name = "John Smith" 并且他们的最终成绩是总分 = 100。如果我要为另一个人再次运行这个程序,他们的姓名 = "Bob Joe" 并且总分 = 95 并存储这些中的每一个。我如何将数字与名称相关联,以便根据他们的总分有一个升序的名称数组。我的预期结果是名称顺序 = [100,95,81,55]GradesOrder = [约翰·史密斯、鲍勃·乔、比利·基德、达姆·达姆]成绩按收到的分数顺序排列
查看完整描述

2 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

这是我将如何执行此操作的代码(这花了我一段时间):


grades = {}



def ordered_score():

    gradesOrder = []

    namesOrder = []

    for a in sorted(list(grades.values()), reverse=True):

        gradesOrder.append(a)

    for a in gradesOrder:

        for b, c in sorted(list(grades.items())):

            if a == c:

                namesOrder.append(b)

    return gradesOrder, namesOrder



grades['Jacob'] = 52

grades['Elsa'] = 97

grades['Timber'] = 22


new_grades = ordered_score()


print(ordered_score()[0])

print(ordered_score()[1])

打印结果如下所示:


[97, 52, 22]

['Elsa', 'Jacob', 'Timber']


查看完整回答
反对 回复 2021-12-16
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

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


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


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)]

这是,海事组织,不太直观,因为它返回list的tuples,你按位置有指标,而不是一个明显的字符串键。它节省了一点空间,但这是您几乎不应该担心优化的事情,因为无论如何您都在使用 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=True给任何sorted调用以按降序排序,而不是默认的升序。


查看完整回答
反对 回复 2021-12-16
  • 2 回答
  • 0 关注
  • 147 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信