ฉันแค่อยากจะโพสต์การปรับปรุงบางอย่างเพื่อให้คำตอบก่อนหน้านี้ในแง่ของการเปลี่ยนแปลง QGIS หลาม API ตั้งแต่รุ่น 2.0
ก่อนที่คุณจะได้รับรายชื่อของคุณสมบัติที่เลือกมีiface.activeLayer().selectedFeatures()แต่ในQGISรุ่น>= 2.0คุณตอนนี้ใช้ฟังก์ชั่นแทนQgsFeature.attributes() QgsFeature.attributeMap()ทั้งสองฟังก์ชั่นไม่ได้เหมือนกัน: attributes()ตอนนี้ส่งกลับรายการในขณะที่เก่าattributeMap()กลับพจนานุกรม ใช้เวลาสักครู่เพื่อเรียกดูเอกสาร API สำหรับQgsFeature.attributes(), QgsAttributesฯลฯ ที่จะเข้าใจว่าแอตทริบิวต์จะถูกเก็บไว้ / เข้าถึงได้
หากคุณสนใจคุณสามารถอ่านเกี่ยวกับบางส่วนของเหตุผลที่อยู่เบื้องหลังการเปลี่ยนแปลง API ในหัวข้อรายชื่อผู้รับจดหมายนี้: [QGIS นักพัฒนา] ใหม่เวกเตอร์ API คุณลักษณะเลือก สั้น ๆ (ในคำพูดของนักพัฒนา QGIS Martin Dobias):
เข้าถึงคุณลักษณะ: ไม่มีf.attributeMap()อีกต่อไปเพราะแอตทริบิวต์จะถูกเก็บไว้ในขณะนี้ในเวกเตอร์ (Python: list) แทนของแผนที่ (Python: dict) QgsFeatureคลาสเลียนแบบภาชนะหลามของออบเจ็กต์
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()