Touches de copie vers un nouveau dictionnaire (Python)
Je suis en train de lire un fichier csv en utilisant DictReader(). La fonction retourne un dictionnaire, où l'en-tête sont les éléments clés et les cellules sont les valeurs. Assez cool.
Mais je suis en train de compte pour les lignes où les données peuvent ne pas être ce que j'attends d'elle. Dans ce cas (je suis attraper une exception ValueError), je voudrais les lignes qui sont "suspects" d'aller dans un dictionnaire, pour le traitement manuel.
Ma question est la suivante: depuis mon premier dictionnaire (de l'objet renvoyé par DictReader) a toutes ses clés mis en place correctement, comment puis-je copier juste les touches dans mon dictionnaire, celui que je veux être juste un dictionnaire de suspect lignes, pour être traitées manuellement?
J'ai joué autour avec dict.fromkeys (), et pour un certain temps maintenant et je suis tout simplement pas obtenir n'importe où. Halp!
EDIT: Collage de certains de mes code erroné. Va aller se cacher dans la honte de mon code. Ne me jugez pas! 😉
unsure_rows = dict.fromkeys(dict(csv_reader).keys(), [])
for row in csv_reader:
# if row['Start Time'] != 'None':
try:
if before_date > strptime(row['Start Time'], '%Y-%m-%d %H:%M:%S') > after_date:
continue
except ValueError:
unsure_rows += row
ValueError: dictionnaire de séquence de mise à jour de l'élément de #0 a longueur de 13; 2 est requis
OriginalL'auteur Harv | 2011-09-10
Vous devez vous connecter pour publier un commentaire.
Vous sont proches. Essayez:
dict.fromkeys(my_csv_dict.keys(),[])
Ce initialiser un dictionnaire avec les mêmes touches que vous avez analysés à partir de votre fichier CSV, et chacun aura une carte à la liste vide (qui, je suppose, vous pourrez ajouter votre suspect valeurs de ligne).
De l'essayer. (Il y a plusieurs changements plus subtils ici, qui sont tous nécessaires, comme la façon dont vous ne pouvez pas initialiser unsure_rows avant de démarrer la lecture du fichier CSV.)
Veuillez voir le jour réponse.
Je veux unsure_rows aussi être un dictionnaire, afin que je puisse faire référence aux valeurs facilement.
Je comprends, mais vous aurez à préciser davantage. Dans votre présent code, lorsque vous faites référence à une clé de dictionnaire, il existe une seule valeur de retour puisque vous travaillez avec une seule ligne. Mais dans votre
unsure_rows
structure, une seule clé référencer les valeurs de [potentiellement] de nombreuses lignes. Voulez-vous chaque dictionnaire clé de carte à la liste des valeurs de cellule de la colonne à laquelle la touche est associée?La première suggestion ajouter les mêmes en vertu de la liste de toutes les clés dans le dictionnaire. Quelqu'un est dans une mauvaise surprise.
OriginalL'auteur cheeken
Avez-vous essayé:
? Si cela ne fonctionne pas pour vous, alors s'il vous plaît ajouter plus de détails sur l'erreur que vous obtenez.
OriginalL'auteur Keith
Vous ne souhaitez pas copier "juste les touches" dans un autre dictionnaire, mais si vous avez "juste les touches" vous aurez une ensemble.
Pour obtenir les clés de dict
d
, vous avez seulement besoin de dired.keys()
.Cette commande retourne une liste (avec les clés dans un ordre arbitraire), que vous pouvez garder une liste ou copiez-le dans un ensemble avec
Exemple:
MODIFIER:
Maintenant, je vois que vous avez l'intention de capturer les suspects paires clé-valeur en tant que vous intercepter des exceptions. Dans ce cas, il suffit de commencer avec un dictionnaire vide
Et à l'intérieur de votre code, ce qui j'imagine est une sorte de boucle, ajouter le suspect paires clé-valeur:
Oh, je vois. Simplement de commencer avec un dictionnaire vide, et ajouter le suspect paires clé-valeur, un par un, comme vous le détecter. J'ai mis à jour la réponse à cette fin.
OriginalL'auteur Ray Toal