【发布时间】:2017-03-21 07:01:21
【问题描述】:
我希望按每个元组中的第一个值对列表进行排序,但是我的代码不会生成任何真正的排序列表,尽管列表的顺序确实发生了变化。我的列表包含具有“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)
就像我说的,这确实改变了列表的顺序,但不是我正在寻找的方式,我也看不到它已将其更改为的任何真实模式。 我正在使用 python 3.4
这是两个列表的输出
未分类: [('7', '1'), ('8', '2'), ('4', '3'), ('28', '4'), ('0', '5') , ('18', '6'), ('10', '7'), ('9', '8'), ('10', '9'), ('2', '10') , ('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', '3') , ('4', '11'), ('4', '14'), ('7', '1'), ('8', '2'), ('9', '8') ]
【问题讨论】:
-
请注意,按第一个值排序是元组的默认排序。除此之外,如果没有minimal reproducible example,则不清楚您的问题是什么。
-
你想根据整数值排序,他们现在是字符串,所以你可以改变 getKey 函数返回 int(item[0])
-
如果你真的想的话,你可以使用字符串,只需使用
float进行排序 - 请参阅stackoverflow.com/a/17474264/2178980(实际上,上面的注释也可以解决问题)
标签: python list sorting tuples