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

Ordering a list of items based on their second value

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

[("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.

如果我正确理解了你的问题,你想对列表进行排序,并且排序顺序由每个元组中提供的数字之和定义。所以,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() 用来将其放在正确位置的数字。