J'ai trouvé ce que j'espérais être la réponse ici.

Dans mon cas, j'ai 2 listes de chaînes. À partir de ce code:

fields = POST[ 'fields' ]
values = POST[ 'row' ]

for ( field, value ) in zip( fields, values ):
    f.write(   f'  field {field}, value {value}\n' )

... voici ce que je reçois:

row: [4,1,"AAR",null,null,"Aardvark Ltd",null,"2019-07-20 00:00:00","modem - ring first","M",null,null,"",null,null]
fields: ["id","category","code","title","firstname","secondname","salutation","lastcon","sendconventions","stdsendmethod","vatno","refquote","notes","created","lastmodif"]
  field [, value [
  field ", value 4
  field i, value ,
  field d, value 1
  field ", value ,
  field ,, value "
  field ", value A
  field c, value A
  field a, value R
  field t, value "
  ...

Il s'agit de séparer les chaînes en caractères, et même d'inclure les crochets, les guillemets et les virgules. Comment pourrais-je éviter cela? Je veux qu'il répertorie les paires de chaînes (1 de chaque liste) au fur et à mesure de son itération.

0
mike rodent 4 juin 2020 à 16:32

3 réponses

Meilleure réponse

Je suppose que vous obtenez ces champs et valeurs à partir d'un corps de requête http. ce que vous pouvez faire dans ce cas, c'est simplement utiliser literal_eval https : //docs.python.org/3/library/ast.html#ast.literal_eval pour convertir les données en listes Python réelles et les parcourir.

Dans ton cas:

from ast import literal_eval
fields = literal_eval(POST['fields'])
values = literal_eval(POST['row'])

Puis essayez de les parcourir.

0
Jarvis 4 juin 2020 à 13:37

En fonction de votre résultat, les champs et les valeurs sont str et non list. Une solution pourrait impliquer de transformer les valeurs en list en utilisant le ast.literal_eval de python.

from ast import literal_eval
fields = literal_eval(POST['fields'])
values = literal_eval(POST['row'])

for field, value in zip(fields, values):
    f.write(f'  field {field}, value {value}\n')

Plus d'informations sur ast.literal_eval peuvent être trouvées ici.

0
Fady Adel 4 juin 2020 à 13:40

@mike: Avez-vous vérifié pour confirmer qu'il s'agit bien de listes en premier lieu? Vous pouvez le faire en utilisant la commande suivante:

    print(type(fields)) 
    print(type(values)) 

L'approche générale de l'utilisation de zip pour boucler sur deux listes et la façon dont vous le faites est en effet correcte. Cependant, je pense que vous gérez un objet à partir d'un package de requêtes, mais pas de listes.

0
UGuntupalli 4 juin 2020 à 13:37