Eu só queria postar algumas atualizações na resposta anterior à luz das alterações na API Python do QGIS desde a versão 2.0 .
Como antes, você obteria uma lista dos recursos selecionados iface.activeLayer().selectedFeatures(), no entanto, nas QGISversões >= 2.0agora você usa a função em QgsFeature.attributes()vez de QgsFeature.attributeMap(). As duas funções não são exatamente as mesmas: attributes()agora retorna uma lista , enquanto as antigas attributeMap()retornaram um dicionário . Tome um momento para navegar na documentação da API para QgsFeature.attributes(), QgsAttributes, etc entender como atributos são armazenados / acessado.
Se você estiver interessado, pode ler sobre algumas das razões por trás das alterações da API neste segmento de lista de discussão: [Qgis-developer] novos recursos de seleção de API de vetor . Resumidamente (nas palavras do desenvolvedor do QGIS, Martin Dobias):
Acesso a atributos: não existe f.attributeMap()mais, porque os atributos agora estão armazenados em um vetor (Python :) em listvez de em um mapa (Python :) dict. QgsFeatureA classe emula o objeto de contêiner python
4 para que você possa acessar atributos como se a QgsFeatureinstância fosse uma lista ou dicionário, com chaves sendo índices ou nomes de campos:
f[0] ... primeiro atributo
f["type"] ... atributo chamado "type"
Ainda é possível obter todos os atributos: f.attributes()retorna uma lista de valores.
Portanto, como um exemplo específico do que você perguntou como fazer (obtenha dados para um único recurso selecionado), suponha que você tenha uma camada de cityrecursos contendo cada um com uma lista de atributos, incluindo um countyatributo. Para obter o countyvalor para uma cidade específica que você selecionou (por exemplo Helena, AR), faça o seguinte no console do Python:
city = iface.activeLayer().selectedFeatures()[0]
city["county"]
# OUTPUTS: u'Phillips'
Se você deseja os valores de todos os campos na tabela de atributos da cidade, basta usar:
cityData = city.attributes()