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)]

ランクフィールドに値を割り当てたいので、90はランク1、25はランク2、17はランク3などです。

それは私が立ち往生しているところです..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 に答える