Chciałem tylko opublikować kilka aktualizacji poprzedniej odpowiedzi w świetle zmian w QGIS Python API od wersji 2.0 .
Tak jak poprzednio, otrzymasz listę wybranych funkcji iface.activeLayer().selectedFeatures(), jednak w QGISwersjach >= 2.0używasz teraz tej funkcji QgsFeature.attributes()zamiast QgsFeature.attributeMap(). Dwie funkcje nie są dokładnie takie same: attributes()teraz zwraca listę , podczas gdy stara attributeMap()zwróciła słownik . Poświęć chwilę, aby zapoznać się z dokumentacją API dla QgsFeature.attributes(), QgsAttributesitp zrozumieć, w jaki sposób atrybuty są przechowywane / dostępne.
Jeśli jesteś zainteresowany, możesz przeczytać o uzasadnieniu zmian API w tym wątku na liście mailowej: [Qgis-developer] nowe funkcje wyboru interfejsu wektorowego . W skrócie (słowami dewelopera QGIS, Martina Dobiasa):
Dostęp do atrybutów: f.attributeMap()już nie ma, ponieważ atrybuty są teraz przechowywane w wektorze (Python:) listzamiast mapy (Python:) dict. QgsFeatureklasa emuluje obiekt kontenera Python
4, dzięki czemu można uzyskać dostęp do atrybutów tak, jakby QgsFeatureinstancja była listą lub słownikiem, przy czym kluczami są indeksy pól lub nazwy pól:
f[0] ... pierwszy atrybut
f["type"] ... atrybut o nazwie „typ”
Nadal można uzyskać wszystkie atrybuty: f.attributes()zwraca listę wartości.
Jako przykład konkretnie tego, o co pytałeś (jak uzyskać dane dla pojedynczej wybranej funkcji), załóżmy, że posiadasz warstwę zawierającą cityfunkcje, z których każda ma listę atrybutów, w tym countyatrybut. Aby uzyskać countywartość dla wybranego miasta (powiedzmy Helena, AR), wykonaj następujące czynności w konsoli Python:
city = iface.activeLayer().selectedFeatures()[0]
city["county"]
# OUTPUTS: u'Phillips'
Jeśli chcesz wartości wszystkich pól w tabeli atrybutów miasta, po prostu użyj:
cityData = city.attributes()