0

所以我正在查询一个名为 golfDB 的数据库,它由一个名为 player 的表组成,其中包含 5 个字段:

  • 姓名(玩家姓名)
  • totalGross(每轮总分的总和)
  • totalRounds(已玩的回合数)
  • pars(制作的 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

你让这它需要的复杂得多。

首先,我不明白您为什么要使用单独的列表。如果您有一个玩家列表,您可以使用一个关键功能非常简单地对它们进行排序:

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 回答