根据第二个值排序项目列表

时间:2015-12-10 17:10:06

标签: python list set

该功能需要能够获取如下列表:

[("Alice", [1, 2, 1, 1, 1, 1]), ("Bob", [3, 1, 5, 3, 2, 5]), ("Clare", [2, 3, 2, 2, 4, 2]), ("Dennis", [5, 4, 4, 4, 3, 4]), ("Eva", [4, 5, 3, 5, 5, 3])]

并处理信息以按每个结果的总和对其进行排序,并以原始格式输出数据,但从得分最低且向下工作的人开始,并且必须使用第一个值中断第一个值。每。 (每个人的第一个结果)

到目前为止,我所写的内容可以输入一个并得出总分:

def result(name, a):
    a.remove(max(a))
    score = 0
    for i in a:
        score = score + i
    return score

但我需要能够对此进行调整以获取任意数量的条目,并且能够超出总数。

我知道我需要让这个功能计算出总分,但是能够保持原始设置,但我不知道如何只与一个条目的一部分进行交互并迭代所有这些相同。

我正在使用Python 3.4。

1 个答案:

答案 0 :(得分:2)

如果我已正确理解您的问题,您可以对列表进行排序,并按照每个元组中提供的数字总和来定义排序顺序。因此,Alice的数字加起来为7,Clare的加起来为15,所以Alice在Clare之前。

sorted()可以使用函数来覆盖正常的排序顺序。例如,您需要:

sorted(data, key=lambda entry: sum(entry[1]))

这意味着,为了找出更大和更小的内容,sorted()将查看数字列表的总和,并进行比较。例如,在查看Alice时,lambda(匿名)函数将被赋予("Alice", [1, 2, 1, 1, 1, 1]),因此entry[1][1, 2, 1, 1, 1, 1]sum(entry[1])则为7,这是sorted()用于将其放在正确位置的数字。