how to sort csv files in python by column values? Giving error

Asked

Viewed 99 times

-2

import os.path

import csv

from operator import itemgetter

lista = []

ficheironovo = ''

ficheiro = input('Escreve o nome do ficheiro orginal: ')

sigla = input('Escreva a Sigla do curso: ')

while not os.path.isfile(ficheiro):

    print(f'\nFicheiro {ficheiro} não encontrado')

    ficheiro = input('Escreva o nome do ficheiro original: ')

ficheironovo = 'Top10_' + sigla + '.csv'

print(ficheiro)

print(ficheironovo)

with open (ficheiro, "r") as f:

    dados = csv.DictReader(f)

    lista = list(dados)

    for line in dados:

        print(line)

        print(line['média'])


    lista_ordenada = sorted(lista, key = itemgetter[2], reverse = True)

    for x in lista_ordenada:

        print(x)
  • First of all, welcome. Please don’t be so careless. What exactly does "you’re making a mistake?" mean? And more, look for the recommendations of the platform, know how to ask a good question.

1 answer

0

You can use the sort using the parameter key to spend a lambda Function, leaving +/- as shown in the example below:

lista = [
    ["Maria", 15],
    ["João", 26],
    ["Jonas", 14],
    ["Fernando", 23]
]

ordenar =  sorted(lista, key=lambda row:row[1] )
#                                           ^ idx usada para o sort

print( ordenar )
# saida:  [['Jonas', 14], ['Maria', 15], ['Fernando', 23], ['João', 26]]

# ORDENAR POR MAIS DE 1 parametro
# ordenar = sorted(lista, key=lambda row:( row[1], row[0] ) )
#                                        ^ tuple com o valor o idx 1 , 0

Online example

lista = [
    {"nome": "Maria", "idade": 15},
    {"nome": "João", "idade": 26},
    {"nome":"Jonas", "idade":14},
    {"nome":"Fernando", "idade":23}
]

ordenar =  sorted(lista, key=lambda row:row['idade'] )
#                                              ^ key usada para o sort

print( ordenar )
# saida: [{'idade': 14, 'nome': 'Jonas'}, {'idade': 15, 'nome': 'Maria'}, {'idade': 23, 'nome': 'Fernando'}, {'idade': 26, 'nome': 'João'}]

# ORDENAR POR MAIS DE 1 parametro
# ordenar = sorted(lista, key=lambda row:( row['idade'], row['nome'] ) )
#                                        ^ tuple com o valor de idade e nome

Online example 2

Browser other questions tagged

You are not signed in. Login or sign up in order to post.