Skip to content

Instantly share code, notes, and snippets.

@RicardoTurco
Last active March 24, 2023 18:17
Show Gist options
  • Save RicardoTurco/1b67968407c27afba42e72eeaeb27fba to your computer and use it in GitHub Desktop.
Save RicardoTurco/1b67968407c27afba42e72eeaeb27fba to your computer and use it in GitHub Desktop.
Python: ordenando diconários
# Normalmente não existe a necessidade de realizar ordenação em dicionários, haja vista
# que acessamos um determinado "valor" através de uma "chave", ou seja ... não faz diferença
# se essa "chave" esteja no INÍCIO ou no FIM do dicionário ...
# definindo um dicionário ...
d1 = {'um': 1, 'dois': 2, 'tres': 3, 'quatro': 4}
from operator import itemgetter
# Ao utilizar o 'itemgetter', podemos ordenar um dicionário por suas CHAVES e/ou VALORES ...
# onde será retornado uma lista de tuplas com cada item (chave/valor) do dicionário ...
# ordenando pelas CHAVES ...
var = sorted(d1.items(), key=itemgetter(0))
# [('dois', 2), ('quatro', 4), ('tres', 3), ('um', 1)]
# ordenando pelos VALORES ...
var = sorted(d1.items(), key=itemgetter(1))
# [('um', 1), ('dois', 2), ('tres', 3), ('quatro', 4)]
# Para ordenar em ordem DESCRESCENTE:
var2 = list(reversed(var))
# [('quatro', 4), ('tres', 3), ('dois', 2), ('um', 1)]
# E caso se deseje transformar novamente em um DICIONÁRIO:
var3 = dict(var)
## {'um': 1, 'dois': 2, 'tres': 3, 'quatro': 4}
# Um detalhe à ser observado, é que ao realizar essa ordenação, seja por CHAVES e/ou VALORES ...
# eles devem ser do mesmo TIPO ... caso contrário, será "levantada" uma exception do tipo "TypeError" ...
Ex:
# um dos valores é uma STRING e os outros são INTEIROS ...
d1 = {'um': 1, 'dois': 2, 'tres': '3', 'quatro': 4}
# se tentarmos ordenar será "levantada" uma exception ...
var = sorted(d1.items(), key=itemgetter(1))
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-23-dbb891f2a7cc> in <module>
----> 1 var = sorted(d1.items(), key=itemgetter(1))
TypeError: '<' not supported between instances of 'str' and 'int'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment