2017-05-03 2 views
-1

Je suis nouveau dans la programmation et aux prises avec un problème.erreur: Mettre le curseur dans la liste des paires: "TypeError: taille de la séquence doit correspondre à la taille de la ligne"

J'ai une liste de paires et je veux mettre à jour le champ d'une table avec la deuxième valeur de ces paires pour avoir ce résultat:

RowID Field 
1  b 
2  d 

Ce mon code:

pairs = [('a', 'b') , ('c', 'd')] 

for row in pairs: 
    first = row[0] 
    second = row[1] 
    with arcpy.da.UpdateCursor(myTable, "Field") as cursor1: 
     for row2 in cursor1: 
     row2 = second 
     cursor1.updateRow(row2) 

Mais Je reçois le message d'erreur suivant:

cursor1.updateRow(row2) 
TypeError: sequence size must match size of the row 

Comment puis-je résoudre ce problème?

+0

N'utilisez-vous que la valeur de la deuxième paire? Quel est le but de la première valeur dans chaque paire? Le nombre de lignes correspond-il au nombre de paires de valeurs dans votre liste? – Midavalo

+0

Pour ArcPy, je pense que vous êtes mieux à la recherche/demande à l'échange de pile [GIS.SE]. – Midavalo

+0

Les premières valeurs des paires ont été utilisées dans une étape précédente de mon code: elles ne sont pas utiles pour celle-ci. – zobalette

Répondre

0

Cette erreur peut s'afficher car vous essayez de définir la valeur d'une ligne entière plutôt que d'un seul champ. Votre ligne est une liste de tous les champs - [Field] - et vous devez écrire dans un champ spécifique - Field - vous devez donc référencer cette valeur dans la liste des lignes.

row2[0] = second 

Cela dit, je pense que vous aurez toujours la même valeur d parce que vous faites référence à la deuxième valeur de la seconde paire. Parcourez votre liste une fois à l'intérieur du curseur. Si vous avez plus de lignes dans votre tableau que de valeurs dans la liste, le message not enough values in list s'affichera.

pairs = [('a', 'b') , ('c', 'd')] 
i = 0 
with arcpy.da.UpdateCursor(myTable, "Field") as cursor: 
    for row in cursor: 
     if not i > len(pairs): 
      row = pairs[i][1] 
      cursor.updateRow(row) 
     else: 
      print "not enough values in list" 
     i += 1 
+0

Merci Midivalo, ça a fonctionné avec les deux corrections (indexer la rangée et parcourir la liste)! – zobalette