按值对词典/列表排序

2024-09-28 04:25:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个游戏,我想打印出从最高到最低的用户分数。你知道吗

到目前为止这是我的代码

player_scores = {}
for line in reversed(open("playerscores.txt").readlines()):
    name, score = line.rstrip('\n').split(' / ')
    score = int(score)
    if name in player_scores and len(player_scores[name]) < 3:
        player_scores[name].append(score)
    if name not in user_scores:
        player_scores[name] = list((score,))

中的名称playerscores.txt文件存储方式如下:

Bob / 10
Jill / 10

我的代码从用户那里得到最后3个分数(最后3个生命),并以此为基础。我需要打印用户名连同最高分数最低。你知道吗

Sort a Python dictionary by value的解不起作用。我最终得到如下输出:

[('Alex', [1]), ('Joeseph', [32, 576]), ('Steve', [33]), ('Bob', [55, 22])]

没有分类的。你知道吗


Tags: 代码用户nameintxt游戏forif
3条回答

首先,从所有分数列表中获取每个玩家的最高分数:

>>> player_scores = dict([('Alex', [1]), ('Joeseph', [32, 576]), ('Steve', [33]), ('Bob', [55, 22])])
>>> top_scores = {name: max(scores) for name, scores in player_scores.items()}

现在可以使用operator.itemgetter按值排序。记住逆转结果!你知道吗

>>> sorted(top_scores.items(), key=operator.itemgetter(1), reverse=True)
[('Joeseph', 576), ('Bob', 55), ('Steve', 33), ('Alex', 1)]

最后,要打印它,只需执行以下操作

for name, score in your_sorted_scores_list:
    print("{:20} - {}".format(name, score))

从你的例子到被指出是一个重复的答案的区别是,在这个例子中,你可以比较每个键的值,因为它是一个列表。您必须将(我想)与该列表中的最大分数进行比较-因此keyfunction必须处理:

score_list = sorted(player_scores.items(), key=lambda item: max(item[1]))

Python 2 这是一种方法: 编辑

player_scores = {
    'Bob': 12,
    'Pete': 3,
    'Jim': 10,
    'Joe': 15,
    'Bill': 14,
    'Sam': 2,
    'Tim': 10
}

k = sorted(player_scores, key=player_scores.__getitem__, reverse=True)
v = sorted(player_scores.values(), reverse=True)
sorted_player_scores = zip(k,v)
print sorted_player_scores

输出:

[('Joe', 15), ('Bill', 14), ('Bob', 12), ('Jim', 10), ('Tim', 10), ('Pete', 3), ('Sam', 2)]

相关问题 更多 >

    热门问题