0
votes

Obtenez la chaîne de clés correspondant à un format d'un dict-python

Ma liste a les dictionnaires suivants.

[CommandéDict ([((numéro d'employé ',' 1 '), ("Nom de l'employé", "Mme A'), (" RMG SPOC ', 'X'), ('' Expérience totale (YRS) ',' 3.06 '), («Jours non alloués»,' 18 '), («Détails de compétence», «Test manuel»), («Numéro de contact»,' 1234 ')]), OrderedDict ([(Numéro d'employé »,« 2 »), (« Nom de l'employé »,« M. B »), (« RMG SPOC »,« Y »), (« Expérience totale) ',' 2.51 '), («jours non alloués»,' 28 '), («Détails des compétences», «Test manuel»), («Numéro de contact»,' 2345 ')]), CommandedDict ([(Numéro d'employé) ',' 3 '), ("nom de l'employé", "M. C"), ("RMG SPOC", "Z"), ("Expérience totale (YRS)", "1,86'), (" jours non alloués " , '9'), («Détails de compétence», «C ++, test manuel, oracle»), («Numéro de contact», '4567')]), CommandéDict ([(«Numéro d'employé», '4'), ( "Nom de l'employé", "M. D '), (" RMG SPOC "," XYZ "), (" Expérience totale (YRS) "," 7,68 "), (" jours non alloués "," 23'), (" Détails de compétence ',' test manuel, sql, hcm '), ("numéro de contact",' 789 ')])]]

Je pousse ces valeurs à la base de données en pré Paring un dictionnaire utilisant une boucle sur les données ci-dessus. xxx

i Obtenez les données d'origine d'un Excel / CSV. Cela fonctionne bien tant que les touches correspondent aux données de l'Excel / CSV fourni.

Dans le cas où, l'Excel / CSV a un "nom de l'employé" comme "nom de l'employé" ou "nom de l'employé", alors ce qui précède ne fonctionnera pas.

y a-t-il un moyen de Ce que je peux gérer cela, de telles clés telles que «Nom de l'employé» sont mappées à la valeur correspondant à l'un des formats (nom de l'employé »,« nom de l'employé »,« nom de l'employé »),« rmg_spoc »correspondant à n'importe quel format (' RMG ',' RMG ',' RMG SPOC ',' RMG SPOC ',' RMG * '), "Total_experience" correspondant à l'un des formats («expérience totale», «expérience totale»,' * [e] [e] xperience * ').


1 commentaires

Habituellement, une combinaison de 'Employee Name'.Strip (). Basse ()


3 Réponses :


0
votes

@ c.nivs est correct, voici un extrait montrant comment cela fonctionne compte de vos exemples.

options = ('Employee Number','EMPLOYEE NUMBER','employee number')

for option in options:
  assert option.strip().lower() == "employee number"
  print("true")


0 commentaires

0
votes

Qu'en est-il de la normalisation des clés dans votre entrée en premier? - Peut-être que quelque chose comme ce qui suit fera: xxx

pour les données d'échantillon, vous obtiendrez: xxx


0 commentaires

1
votes

Cela ressemble à un exemple de problème répété de cas de dictionnaire insensible à casse ( cette question et tout Duplicats )

La solution proposée à partir du message consiste à utiliser une enveloppe de dict (ou collections.OseredDict), comme: xxx

et dans votre code Vous venez d'envelopper vos dicts avec ce wrapper afin que vous puissiez effectuer une recherche de clé insensible à casse: xxx


2 commentaires

Cela fonctionne pour les valeurs sensibles à la casse. Je reçois un avertissement lorsque cela est utilisé - déprécationwarning: utiliser ou importer les abcs de «collections» au lieu de «collections.abc» est obsolète et en 3.8, cela cessera de fonctionner


Correction - Utilisé Import Collections.ABC