0

そのため、golfDB と呼ばれるデータベースにクエリを実行しています。このデータベースは、5 つのフィールドを持つ player という 1 つのテーブルで構成されています。

  • 名前(プレイヤー名)
  • totalGross (各ラウンドの総得点の合計)
  • totalRounds (プレイしたラウンド数)
  • pars (作成されたパーの合計数)
  • バーディー数(合計バーディー数)

私が取り組んでいる関数は、平均スコア (totalGross/totalRounds) に従ってプレーヤーを降順でリストすることになっています。

これを行う方法が完全にはわかりません.私のコードは現在、すべてのコンポーネント(プレーヤー、合計総スコア、および合計ラウンド)を独自のリストに分離しています. 合計総スコアリストの各アイテムを合計ラウンドリストの各アイテムで割ることができると考えていましたが、それらのスコアを対応するプレーヤーにリンクして注文できるようにする方法がよくわかりません.

このようにすることさえ可能かどうかわからないので、誰か提案やアイデアはありますか?

def queryDBplayers(cursor):
    """lists the players in order of their total gross score"""
    cursor.execute('select name, totalGross, totalRounds from players')
    answer= cursor.fetchall()
    players = list()
    for items in answer:
        players.append(items[0])
    totalGrossScore = list()
    for items in answer:
        totalGrossScore.append(items[1])
    totalRoundsScore = list()
    for items in answer:
        totalRoundsScore.append(items[2])
4

2 に答える 2

3

これを必要以上に複雑にしています

まず、なぜ個別のリストをいじっているのか理解できません。プレーヤーのリストが 1 つしかない場合は、キー関数を使用して非常に簡単に並べ替えることができます。

players.sort(key=lambda p: float(p[1]) / float(p[2]))

しかし、これを Python で行うべきではありません。並べ替えを行うのに最適な場所は、データベース内です。

SELECT name, totalGross, totalRounds ORDER BY totalGross/totalRounds

前の質問と同様に、基本的な SQL を学ぶことで利益が得られるようです。

于 2013-04-25T16:25:47.320 に答える
0
cursor.execute('select name, totalGross, totalRounds from players')
answer= cursor.fetchall()

print sorted(answer,key=lambda x:float(x[1])/float(x[2]))

うまくいくと思います...わかりませんが、これをソートするクエリを作成できるかもしれません

col1,col2,col3 = zip(*big_list)補足として、あなたの場合のように列を分離する方が簡単です

players,grosses,rounds = zip(*answer)
于 2013-04-25T16:23:50.810 に答える