按第一个值排序元组列表

2024-04-25 12:35:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望按每个元组中的第一个值对列表进行排序,但是我的代码不会生成任何真正排序的列表,尽管列表的顺序会发生变化。我的列表包含一个元组,它的值是“PlayerCode”,它是每个玩家的唯一键。“平均分”是玩家每场比赛得分的平均值。我想按“平均分”对这张单子进行排序,虽然我似乎不能把它弄对。这是我的密码

def getKey(item):
        return item[0]
def sortByPoints():
    foundPlayers = []
    with open ('PlayerList.csv') as csvfile:
        reader = csv.DictReader(csvfile)
        for row in reader:
            foundPlayers.append((row['Average PTS'], row['PlayerCode']))
    print(foundPlayers)
    sortedPlayers = sorted(foundPlayers, key = getKey)

    print (sortedPlayers)

就像我说的,这确实改变了列表的顺序,但并不是我所寻找的方式,我也看不到它改变了的任何真正的模式。 我使用的是python3.4

这是两个列表的输出

未排序: [('7','1'),('8','2'),('4','3'),('28','4'),('0','5'),('18','6'),('10','7'),('9','8'),('10','9'),('4','11'),('2','12'),('3','13'),('4','14'),('2','15')]

已排序: [('0','5'),('10','7'),('10','9'),('18','6'),('2','10'),('2','12'),('2','15'),('28','4'),('3','13'),('4','11'),('4','14'),('7','1'),('8','2'),('9','8')]


Tags: csvcsvfile列表排序顺序def玩家item
3条回答

row['Average PTS']row['Player Code']返回字符串。Python将用(可能)令人惊讶的结果来比较字符串

>>> '6' > '42'
True

使用int转换row['Average PTS']和{}。在

问题是你有字符串,所以它是按字母顺序排序的。转换为整数:

foundPlayers.append((int(row['Average PTS']), int(row['PlayerCode'])))

您可以使用从内置模块operator导入的itemgetter

示例代码:

from operator import itemgetter

tuples = [(10, 3), (1, 4), (5, 4)]
sorted_tuples = sorted(tuples, key=itemgetter(0))

print(sorted_tuples)

输出:

^{pr2}$

相关问题 更多 >