Я просто хотел опубликовать некоторые обновления к предыдущему ответу в свете изменений в API QGIS Python, начиная с версии 2.0 .
Как и раньше, вы получите список выбранных функций с iface.activeLayer().selectedFeatures(), однако в QGISверсиях >= 2.0вы теперь используете функцию QgsFeature.attributes()вместо QgsFeature.attributeMap(). Две функции не совсем одинаковы: attributes()теперь возвращает список , тогда как старая attributeMap()вернула словарь . Потратьте немного времени на просмотр документации по API QgsFeature.attributes()и QgsAttributesт. Д., Чтобы понять, как хранятся / доступны атрибуты.
Если вам интересно, вы можете прочитать о некоторых причинах изменений API в этой ветке списка рассылки: [Qgis-developer] новые возможности выбора векторных API-интерфейсов . Коротко (по словам разработчика QGIS Мартина Добиаса):
Доступ к атрибутам: больше f.attributeMap()нет, потому что атрибуты теперь хранятся в векторе (Python:) listвместо карты (Python:) dict. QgsFeatureКласс эмулирует объект-контейнер Python
4, поэтому вы можете обращаться к атрибутам, как если бы QgsFeatureэкземпляр был списком или словарем, а ключами были либо индексы полей, либо имена полей:
f[0] ... первый атрибут
f["type"] ... атрибут с именем "тип"
Все еще возможно получить все атрибуты: f.attributes()возвращает список значений.
Итак, в качестве примера того, что конкретно вы спросили, как сделать (получить данные для одной выбранной вами функции), предположим, что у вас есть слой, содержащий cityобъекты, у каждого из которых есть список атрибутов, включая countyатрибут. Чтобы получить countyзначение для определенного города, который вы выбрали (скажем Helena, AR), выполните следующие действия в консоли Python:
city = iface.activeLayer().selectedFeatures()[0]
city["county"]
# OUTPUTS: u'Phillips'
Если вы хотите получить значения всех полей в таблице атрибутов города, то вы просто должны использовать:
cityData = city.attributes()