Skip to main content

List Comprehension | Python

  • List Comprehension | Python

O que é isso?

def get_dict_from_object(sqlalchemy_obj, to_exclude =['_sa_instance_state']):
db_dict = sqlalchemy_obj.__dict__
new_dict = {
key: db_dict[key]
for key in db_dict.keys()
if key not in to_exclude
}
return new_dict

def get_dicts(query):
return [
get_dict_from_object(obj) for obj in query
]

Resposta

O que você está vendo ali são list comprehensions (ou comprehensões de lista) do Python. Elas permitem criar listas (ou dicionários, sets, etc.) de forma mais concisa, usando um for embutido diretamente na construção.


1. No get_dict_from_object

new_dict = {
key: db_dict[key]
for key in db_dict.keys()
if key not in to_exclude
}
  • Aqui, está sendo criada um dicionário usando dictionary comprehension.
  • O for key in db_dict.keys() percorre todas as chaves do dicionário db_dict.
  • O if key not in to_exclude filtra as chaves que não devem ser incluídas (por exemplo _sa_instance_state do SQLAlchemy).
  • Para cada chave aprovada, ele monta o par chave: valor usando db_dict[key].

💡 Equivalente em forma “tradicional”:

new_dict = {}
for key in db_dict.keys():
if key not in to_exclude:
new_dict[key] = db_dict[key]

2. No get_dicts

return [
get_dict_from_object(obj) for obj in query
]
  • Isso é uma list comprehension.
  • O for obj in query percorre todos os itens de query (que provavelmente é o resultado de um session.query(...) no SQLAlchemy).
  • Para cada obj, chama a função get_dict_from_object(obj) e coloca o resultado (um dicionário) na nova lista.

💡 Equivalente sem list comprehension:

lista = []
for obj in query:
lista.append(get_dict_from_object(obj))
return lista

📌 Resumo

  • [...] for ... in ... → cria uma lista de forma compacta.
  • {... for ... in ...} → cria um dicionário ou set de forma compacta.
  • Pode incluir condições (if ...) para filtrar itens.