Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Nao consigo colocar uma segunda ordenação na minha lista

Preciso que ele primeiro organize os restaurantes pelas notas, mas caso exista alguma nota igual, o criterio de desempate seria a menor distancia, mas nao consigo colocar essa segunda condição do sort, ele sempre pega uma só.

def odistancia(ordenar):
  return ordenar['Distancia']

def onota(ordenar):
    return ordenar['Nota']

restaurantes = [
    {'Restaurante': 'BK', 'Nota': 4.2, 'Distancia': 4.7, },
    {'Restaurante': 'MC Donalds', 'Nota': 4.9, 'Distancia': 1.7},
    {'Restaurante': 'Subway', 'Nota': 4.3, 'Distancia': 1.2},
    {'Restaurante': 'Bobs', 'Nota': 4.2, 'Distancia': 0.8},
    {'Restaurante': 'Giraffas', 'Nota': 4.9, 'Distancia': 1.3},
    {'Restaurante': 'KFC', 'Nota': 4.2, 'Distancia': 1.5}
]

restaurantes.sort(reverse=True, key=onota) and restaurantes.sort(reverse=False, key=odistancia)

print (restaurantes[0])
print (restaurantes[1])
print (restaurantes[2])
print (restaurantes[3])
print (restaurantes[4])
print (restaurantes[5])
1 resposta
solução!

Olá Lucas, para fazer um sort com base em duas chaves você pode usar duas maneiras.

restaurantes.sort(reverse=True, key=lambda x: (x['Nota'], x['Distancia']))
restaurantes.sort(reverse=True, key=itemgetter('Nota', 'Distancia'))

da maneira que está agora no seu código está ordenando por nota e depois ignorando e ordenando por distancia.