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áriodb_dict. - O
if key not in to_excludefiltra as chaves que não devem ser incluídas (por exemplo_sa_instance_statedo SQLAlchemy). - Para cada chave aprovada, ele monta o par
chave: valorusandodb_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 querypercorre todos os itens dequery(que provavelmente é o resultado de umsession.query(...)no SQLAlchemy). - Para cada
obj, chama a funçãoget_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.