10

Could anybody provide an example how to get the attributes of selected features?

I tried the following code in the Python Console : but I'm stuck at the point where I'd like to get the attributes:

from qgis.utils import iface

canvas = iface.mapCanvas() cLayer = canvas.currentLayer() selectList = []

if cLayer: count = cLayer.selectedFeatureCount() print (count) selectedList = layer.selectedFeaturesIds()

for f in selectedList:
    # This is where I'm stuck
    # As I don't know how to get the Attributes of the features

Taras
  • 32,823
  • 4
  • 66
  • 137
dimpflmoser
  • 251
  • 1
  • 3
  • 6

3 Answers3

17

This will work:

layer = iface.activeLayer()

features = layer.selectedFeatures()

for f in features: print f.attributeMap()

In PyQGIS 3:

layer = iface.activeLayer()

features = layer.selectedFeatures()

for f in features: # refer to all attributes print (f.attributes()) # results in [3, 'Group 1', 4.6]

for f in features: # refer to a specific values of a field index print(f.attribute(1)) # results in Group 1

Taras
  • 32,823
  • 4
  • 66
  • 137
Nathan W
  • 34,706
  • 5
  • 97
  • 148
5

For QGIS 3.10

Not sure if this post was asking for it in a list...

Print field of selected features

layer = iface.activeLayer()

for feature in layer.selectedFeatures(): print(feature['field name'])

Create list of selected features

layer = iface.activeLayer()

list = []

for feature in layer.selectedFeatures(): list.append(feature['field'])

print(list)

Taras
  • 32,823
  • 4
  • 66
  • 137
sam grant
  • 51
  • 1
  • 1
2

There are also other approaches available:

Approach 1 : QgsAggregateCalculator with ArrayAggregate

Available aggregates to calculate.

Not all aggregates are available for all field types.

This approach is available since QGIS 2.16.

layer = iface.activeLayer()

creates a memory layer of original layer exclusively with all selected features in it

temp_layer = layer.materialize(QgsFeatureRequest().setFilterFids(layer.selectedFeatureIds()))

specify your target field

result = temp_layer.aggregate(QgsAggregateCalculator.ArrayAggregate, "your_field")[0]

prints an output list

print(result)

Approach 2 : QgsVectorLayerUtils

Contains utility methods for working with QgsVectorLayers.

This approach is available since QGIS 3.

layer = iface.activeLayer()

creates a memory layer of original layer exclusively with all selected features in it

temp_layer = layer.materialize(QgsFeatureRequest().setFilterFids(layer.selectedFeatureIds()))

specify your target field

result = QgsVectorLayerUtils.getValues(temp_layer, "your_field")[0]

print an output list

print(result)


References:

Taras
  • 32,823
  • 4
  • 66
  • 137