Tengo un diccionario de Python con alrededor de 450,000 claves y valores respectivos. Quiero unir este diccionario a una tabla de atributos de un conjunto de datos vectoriales con aproximadamente la misma cantidad de entidades.
Primero creé un nuevo campo donde se almacenarán los valores y guardé su índice en una variable. También guardé el índice del campo a través del cual quiero unir los valores de las claves.
layer_prov = layer.dataProvider()
layer_prov.addAttributes([QgsField("nuevo_campo", QVariant.Double)])
layer.updateFields()
new_field_idx = layer.fields().indexFromName('nuevo_campo')
join_field_idx = layer.fields().indexFromName('campo_unir')
layer
es el conjunto de datos vectoriales al que quiero unir la información del diccionario. dict
es el diccionario.
for key, value in dict.items():
layer.startEditing()
for feature in layer.getFeatures():
attrs = feature.attributes()
join_value = (attrs[join_field_idx])
join_value = str(join_value)
if join_value == key:
feature[new_field_idx] = value
layer.commitChanges()
¿Hay alguna forma de hacer esto más rápido? Para cada entrada en el diccionario, este modelo necesita recorrer todas las características del conjunto de datos vectoriales (450,000 x 450,000 = 202,500,000,000 comparaciones).