Я просто хотів опублікувати деякі оновлення попередньої відповіді у світлі змін у API QGIS Python з версії 2.0 .
Як і раніше, ви отримаєте список вибраних функцій iface.activeLayer().selectedFeatures(), однак у QGISверсіях >= 2.0ви зараз використовуєте функцію QgsFeature.attributes()замість QgsFeature.attributeMap(). Дві функції не зовсім однакові: attributes()тепер повертає список , тоді як стара attributeMap()повертає словник . Знайдіть хвилину, щоб переглянути документацію API для QgsFeature.attributes(), QgsAttributesі т.д., щоб зрозуміти, як атрибути зберігаються / доступні.
Якщо вам цікаво, ви можете ознайомитись з деякими обґрунтуваннями змін API в цьому потоці списку розсилки: [Qgis-developer] new vector api select options . Коротко (зі слів розробника QGIS Мартіна Добіаса):
Доступ до атрибутів: більше f.attributeMap()немає, тому що атрибути тепер зберігаються у векторі (Python:) listзамість карти (Python:) dict. QgsFeatureклас емулює об'єкт контейнера python
4, щоб ви могли отримати доступ до атрибутів, як якщоби QgsFeatureекземпляр був списком або словником, при цьому ключі є або індексами поля, або іменами полів:
f[0] ... перший атрибут
f["type"] ... атрибут з назвою "type"
Ще можна отримати всі атрибути: f.attributes()повертає список значень.
Отже, як приклад конкретно того, що ви запитували, як це зробити (отримати дані для однієї вибраної вами функції), припустимо, у вас був шар містять cityфункції, у кожному з яких є список атрибутів, включаючи countyатрибут. Щоб отримати countyзначення для вибраного міста (скажімо Helena, AR), виконайте наступне на консолі Python:
city = iface.activeLayer().selectedFeatures()[0]
city["county"]
# OUTPUTS: u'Phillips'
Якщо ви хочете, щоб значення всіх полів у таблиці атрибутів міста були використані:
cityData = city.attributes()