0

我正在使用 python 从 MySQL 读取值,然后对列表进行排序。然后我需要对列表进行排名并将其写回 MySQL。我的代码是

获取列表

cursor.execute ("SELECT winnings, user, rank FROM round_lb WHERE r_id = 5")
round_test = cursor.fetchall()

返回

((90L, 70L, 0L), (17L, 1L, 0L), (25L, 78L, 0L))

排序列表(因此最高奖金列在前)

print sorted(round_test, reverse =True)
[(90L, 70L, 0L), (25L, 78L, 0L), (17L, 1L, 0L)]

我现在想为 rank 字段分配一个值,所以 90 是 rank1、25 rank2 和 17 rank3 等...

这就是我卡住的地方..有没有人知道一种在python中对它们进行排名的简单方法......所以我可以将它们写回MySQL......

4

2 回答 2

4
>>> [row[:-1] + (rank,) for rank, row in enumerate(sorted(rows, reverse=True), start=1)]
    [(90L, 70L, 1), (25L, 78L, 2), (17L, 1L, 3)]
  • enumerate(rows, start=1)返回返回 (rank, row) 的元组列表,从1
  • row[:-1]从行中取出所有项目,但最后一个(有效地剥离旧排名)
  • row[:-1] + (rank,)连接行的第一项和包含排名的 1 元组。

 

如果你打算替换它,你为什么要选择它呢?

cursor.execute ("SELECT winnings, user FROM round_lb WHERE r_id = 5")
rows = cursor.fetchall()
for rank, (winnings, user) in enumerate(sorted(rows, reverse=True), start=1):
    params = (winnings, user, rank)
    cursor.execute("INSERT INTO round_lb (winnings, user, rank) VALUES (%s, %s, %s)", params)

 

为什么不在 MySQL 中对它们进行排序?

cursor.execute ("SELECT winnings, user FROM round_lb WHERE r_id = 5 ORDER BY winnings DESC")
rows = cursor.fetchall()
for rank, (winnings, user) in enumerate(rows, start=1):
    params = (winnings, user, rank)
    cursor.execute("INSERT INTO round_lb (winnings, user, rank) VALUES (%s, %s, %s)", params)
于 2013-03-14T17:36:59.593 回答
0

如果您只需要顺序排序,您已经将它放在列表中元组的位置:

sorted_list = sorted(round_test, reverse =True)
# [(90L, 70L, 0L), (25L, 78L, 0L), (17L, 1L, 0L)]
ranked_list = []
for position, row in enumerate(sorted_list):
    ranked_list.append(tuple(row[0:2] + [position])) # replaces the 3rd row member
# ranked_list
# [(90L, 70L, 1), (25L, 78L, 2), (17L, 1L, 3)]
于 2013-03-14T17:36:48.950 回答