Como se puede ordenar en orden ascendente o descendente un campo en una tabla de atributos Qgis con python
Respuestas
¿Demasiados anuncios?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.
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'