Une itération sur un dictionnaire en python et du dépouillement de l'espace blanc
Je travaille avec le web scraping cadre de Scrapy et je suis un peu un noob quand il s'agit de python. Donc, je me demande comment puis-je effectuer une itération sur l'ensemble de la raclée des éléments qui semblent être dans un dictionnaire et une tranche de blanc de l'espace de chacun.
Voici le code que j'ai été jouer avec dans mon article pipeline.:
for info in item:
info[info].lstrip()
Mais ce code ne fonctionne pas, parce que je ne peut pas sélectionner des éléments individuellement. J'ai essayé de faire ceci:
for key, value item.items():
value[1].lstrip()
Cette deuxième méthode fonctionne, mais le problème est que je n'ai aucune idée de comment faire une boucle sur toutes les valeurs.
Je sais que c'est probablement une solution facile, mais je n'arrive pas à le trouver. Toute aide serait grandement appréciée. 🙂
Ont ajouté une réponse avec un exemple
OriginalL'auteur AlexW.H.B. | 2012-01-18
Vous devez vous connecter pour publier un commentaire.
Pas une réponse directe à la question, mais je vous suggère de regarder Élément De Chargeurs et d'entrée/sortie des processeurs. Beaucoup de votre nettoyage peut être prendre soin de ici.
Un exemple des bandes de chaque entrée:
Pas de problème 🙂
OriginalL'auteur zsquare
Dans un dictionnaire de compréhension (disponible en Python >=2.7):
Python 3.X:
Shawn, merci, j'ai oublié de mentionner la version de restriction. J'ai ajouté un commentaire.
OriginalL'auteur monkut
Ce que vous devez noter est que
lstrip()
renvoie une copie de la chaîne plutôt que de modifier l'objet. À fait de mise à jour de votre dictionnaire, vous devez affecter la trace de la valeur de retour de l'article.Par exemple:
Notez l'utilisation de
.iteritems()
qui renvoie un itérateur au lieu d'une liste de paires clé-valeur. Cela le rend un peu plus efficace.Je dois ajouter que en Python3,
.item()
a été modifié pour renvoyer "points de vue" et donc.iteritems()
ne serait pas nécessaire.Ce qu'il fait. Je suis contente de coller à l'OP de l'exemple et en supposant que c'est ce qu'il cherche à atteindre. Le message clé ici est que la trace ou le remplacement de chaîne doit être affecté.
.. de toute façon, vous avez raison. Bien que j'aime de plus en plus la compréhension de la solution par monkut 😉
OriginalL'auteur Shawn Chin
Essayer
ou de manière globale comme suggéré par monkut:
Bon point! Afin de mieux utiliser les regExp comme par exemple
import re
et puisre.sub(r'\s', '', stringWithWhiteSpaces)
OriginalL'auteur ezdazuzena
En supposant que vous souhaitez pour dépouiller les valeurs de
yourDict
la création d'une nouvelledict
appelénewDict
:Ce code peut gérer plusieurs types de valeurs, donc éviter le décapage
int
,float
, etc.OriginalL'auteur Ron Kalian
Bien que @zquare a la meilleure réponse à cette question, j'ai besoin de carillon avec un Pythonic méthode qui prendra en compte également pour le dictionnaire des valeurs qui ne sont pas des chaînes. Ce n'est pas récursive, vous l'esprit, comme il ne fonctionne qu'avec une seule dimension dictionnaire d'objets.
Cette mise à jour du dictionnaire original de la valeur si la valeur est une chaîne de caractères et commence par un espace.
Mise à JOUR:
Si vous souhaitez utiliser des Expressions Régulières et d'éviter l'utilisation commence avec et endswith. Vous pouvez utiliser ceci:
Cette version bandes si la valeur de a tête ou en queue caractère espace blanc.
OriginalL'auteur Zinthose
J'utilise la suite. Vous pouvez passer n'importe quel objet comme argument, y compris une chaîne de caractères, une liste ou un dictionnaire.
OriginalL'auteur promaty