【问题标题】:How to print a list value one below another如何在另一个下方打印列表值
【发布时间】:2022-11-22 10:54:00
【问题描述】:

我需要按降序对分数进行排序。用户和积分在lista_ranking里面,其中包括以下代码:

[{'partido': {'codigo': 'AAA', 'fecha': datetime.date(2022, 11, 20), 'hora': '13:00hs', 'equipo_local': 'Catar', 'equipo_visitante ':'厄瓜多尔','estado':'Finalizado','goles_local':0,'goles_visitante':1},'usuario':{'cedula':'123','nombre':'Gon','apellido ': 'Henderson', 'fecha': '(2003, 3, 12)', 'puntaje': 5}, 'goles_local': 1, 'goles_visitante': 0}, {'partido': {'codigo': 'AAA', 'fecha': datetime.date(2022, 11, 20), 'hora': '13:00hs', 'equipo_local': 'Catar', 'equipo_visitante': '厄瓜多尔', 'estado': ' Finalizado', 'goles_local': 0, 'goles_visitante': 1}, 'usuario': {'cedula': '1234', 'nombre': 'George', 'apellido': 'Stev', 'fecha': ' (2003, 3, 12)', 'puntaje': 8}, 'goles_local': 0, 'goles_visitante': 1}]

用代码

ranking_high_to_low=sorted([(numeros['usuario']['puntaje'], numeros['usuario']['nombre'], numeros['usuario']['apellido']) for numeros in lista_ranking], reverse=True) print(ranking_high_to_low)

它像这样从最高到最低打印排名:

[(8, 'George', 'Stev'), (5, 'Gon', 'Henderson')]

我应该使用哪个 for 来打印排名如下:

George Stev 8
Gon Henderson 5

【问题讨论】:

  • 这不是 for 循环问题。如果你有一条记录a = (8, 'George', 'Stev'),你会如何打印George Stev 8PEP 498

标签: python list sorting dictionary


【解决方案1】:

您已接近解决方案。您可以使用循环并加入名称的一部分来打印用户的排名。

import datetime

lista_ranking = [
    {'partido': {'codigo': 'AAA', 'fecha': datetime.date(2022, 11, 20),
                 'hora': '13:00hs', 'equipo_local': 'Catar',
                 'equipo_visitante': 'Ecuador', 'estado': 'Finalizado',
                 'goles_local': 0, 'goles_visitante': 1},
     'usuario': {'cedula': '123', 'nombre': 'Gon',
                 'apellido': 'Henderson',
                 'fecha': '(2003, 3, 12)', 'puntaje': 5},
     'goles_local': 1,
     'goles_visitante': 0}, {
        'partido': {'codigo': 'AAA',
                    'fecha': datetime.date(2022, 11, 20),
                    'hora': '13:00hs', 'equipo_local': 'Catar',
                    'equipo_visitante': 'Ecuador',
                    'estado': 'Finalizado',
                    'goles_local': 0, 'goles_visitante': 1},
        'usuario': {'cedula': '1234', 'nombre': 'George',
                    'apellido': 'Stev', 'fecha': '(2003, 3, 12)',
                    'puntaje': 8}, 'goles_local': 0,
        'goles_visitante': 1}]
ranking_high_to_low = sorted([(numeros['usuario']['puntaje'],
                               numeros['usuario']['nombre'],
                               numeros['usuario']['apellido']) for numeros in
                              lista_ranking], reverse=True)
for info in ranking_high_to_low:
    print(f"{' '.join(info[1:])} {info[0]}")

输出:

George Stev 8
Gon Henderson 5

这里 join 方法的好处是它如何打印包含多个部分的名称(名字、中间名、姓氏)。

更新:

如果你想存储独特的球员并按照他们的总分对他们进行排序,你需要使用字典。然后按得分倒序对字典进行排序。

import datetime

lista_ranking = [
    {'partido': {'codigo': 'AAA', 'fecha': datetime.date(2022, 11, 20),
                 'hora': '13:00hs', 'equipo_local': 'Catar',
                 'equipo_visitante': 'Ecuador', 'estado': 'Finalizado',
                 'goles_local': 0, 'goles_visitante': 1},
     'usuario': {'cedula': '123', 'nombre': 'Gon',
                 'apellido': 'Henderson',
                 'fecha': '(2003, 3, 12)', 'puntaje': 5},
     'goles_local': 1,
     'goles_visitante': 0},
    {'partido': {'codigo': 'AAA', 'fecha': datetime.date(2022, 11, 20),
                 'hora': '13:00hs', 'equipo_local': 'Catar',
                 'equipo_visitante': 'Ecuador', 'estado': 'Finalizado',
                 'goles_local': 0, 'goles_visitante': 1},
     'usuario': {'cedula': '123', 'nombre': 'Gon',
                 'apellido': 'Henderson',
                 'fecha': '(2003, 3, 12)', 'puntaje': 5},
     'goles_local': 1,
     'goles_visitante': 0}
    , {
        'partido': {'codigo': 'AAA',
                    'fecha': datetime.date(2022, 11, 20),
                    'hora': '13:00hs', 'equipo_local': 'Catar',
                    'equipo_visitante': 'Ecuador',
                    'estado': 'Finalizado',
                    'goles_local': 0, 'goles_visitante': 1},
        'usuario': {'cedula': '1234', 'nombre': 'George',
                    'apellido': 'Stev', 'fecha': '(2003, 3, 12)',
                    'puntaje': 8}, 'goles_local': 0,
        'goles_visitante': 1}]
ranking_high_to_low = [(numeros['usuario']['puntaje'],
                        numeros['usuario']['nombre'],
                        numeros['usuario']['apellido']) for numeros in
                       lista_ranking]

players = {}
for info in ranking_high_to_low:
    player_name = ' '.join(info[1:])
    players[player_name] = players.get(player_name, 0) + info[0]

for player, score in sorted(players.items(), key=lambda x: x[1], reverse=True):
    print(f"{player} {score}")

输出:

Gon Henderson 10
George Stev 8

参考:

【讨论】:

  • 这奏效了!但是,当用户进入多个游戏时,它不会将积分相加,而是将添加的积分打印给用户,但会打印用户进入游戏的次数。如下(一个在一个下面但是我不知道怎么评论的时候): Gon Henderson 16 Gon Henderson 16 Gon Henderson 16 George Stev 8 George Stev 8
  • @PaniHardoy 更新了代码和解释。希望能帮助到你。
【解决方案2】:

我认为这应该可以解决问题:

   for (num, first, last) in ranking_high_to_low:
       print("{} {} {}".format(first, last, num))

【讨论】:

  • 这也奏效了!但是发生同样的事情,当用户进入多个游戏时,它不会将积分相加,而是将添加的积分打印给用户,但打印用户进入游戏的次数。如下(一个在一个下面但是我不知道怎么评论的时候): Gon Henderson 16 Gon Henderson 16 Gon Henderson 16 George Stev 8 George Stev 8
猜你喜欢
  • 2012-08-24
  • 2019-11-29
  • 2022-12-06
  • 2019-11-09
  • 1970-01-01
  • 1970-01-01
  • 2022-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多