0 votos

python_ordenar_campo

Como se puede ordenar en orden ascendente o descendente un campo en una tabla de atributos Qgis con python

0voto

Jimmy Neutron Puntos 410

Para ordenar un campo en una tabla de atributos en QGIS con Python, puedes utilizar la siguiente función:

layer = iface.activeLayer() # Obtener la capa activa
field_index = layer.fields().indexFromName('nombre_campo') # Obtener el índice del campo que deseas ordenar
ascending = False # True para ordenar de forma ascendente, False para ordenar de forma descendente

layer.startEditing() # Comenzar la edición de la capa
layer.dataProvider().addAttributes([QgsField('temp', QVariant.Int)]) # Agregar un campo temporal para ordenar
layer.updateFields() # Actualizar los campos de la capa

expression = QgsExpression('"nombre_campo"')
context = QgsExpressionContext()
context.appendScopes(QgsExpressionContextUtils.globalProjectLayerScopes(layer))
expression.prepare(context)

features = layer.getFeatures()
values = {}
for feature in features:
    expression.evaluate(feature)
    values[feature.id()] = expression.value()

sorted_values = sorted(values.items(), key=lambda x: x[1], reverse=ascending)

i = 1
for feature_id, value in sorted_values:
    layer.changeAttributeValue(feature_id, field_index, i)
    i += 1

layer.dataProvider().deleteAttributes([layer.fields().indexFromName('temp')]) # Eliminar el campo temporal
layer.updateFields() # Actualizar los campos de la capa
layer.commitChanges() # Guardar los cambios

En este código, debes reemplazar 'nombre_campo' por el nombre del campo que deseas ordenar y ascending por True si deseas ordenar de forma ascendente o False si deseas ordenar de forma descendente. Este código añadirá un campo temporal a la capa, ordenará los valores del campo especificado y luego actualizará la capa con los valores ordenados. Recuerda que este código debe ejecutarse en la consola de Python de QGIS.

0voto

Gracias por su respuesta. Me da el siguiente error, en la fila 17 : expression.evaluate(feature)

Traceback (most recent call last): File "C:\OSGeo4W\apps\Python39\lib\code.py", line 90, in runcode exec(code, self.locals) File "<input>", line 1, in <module> File "<string>", line 17, in <module> TypeError: QgsExpression.evaluate(): arguments did not match any overloaded call: overload 1: too many arguments overload 2: argument 1 has unexpected type 'QgsFeature'

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X