2010-05-05 6 views
0

La situation:Obtenir des données imprévisibles dans un format tableau

Chaque page a <input> J'érafle éléments avec un title= et un value=

Je ne sais pas ce qui va être sur la page.

Je souhaite que toutes mes données collectées soient regroupées dans un seul tableau, avec une colonne pour chaque titre. Donc, fondamentalement, j'ai besoin que chaque ligne de données s'aligne avec tous les autres, et si une ligne n'a pas un certain élément, alors elle devrait être vide (mais il doit y avoir quelque chose pour garder l'alignement) .

par ex.

Première page a: {animal: cat, colour: blue, fruit: lemon, day: monday}

page Second a: {animal: fish, colour: green, day: saturday}

Troisième page a: {animal: dog, number: 10, colour: yellow, fruit: mango, day: tuesday}

Alors ma table résultant devrait être:

animal | number | colour | fruit | day 
cat | none | blue | lemon | monday 
fish | none | green | none | saturday 
dog | 10  | yellow | mango | tuesday 

Bien qu'il soit bon de garder l'ordre de la titlevalue paires, que je sais que les dictionnaires ne feront pas.

Donc, fondamentalement, je dois générer des colonnes de tous les titles (conservés dans l'ordre, mais a fusionné en quelque sorte ensemble)

Quelle serait la meilleure façon de faire cela sans connaître tous les titres possibles et en spécifiant explicitement une commande pour les valeurs à mettre en?

Répondre

2

Vous avez besoin d'un algorithme multi-passes. Rappelez-vous toutes les pages grattées dans une liste de dicts. Dans la première passe, parcourez cette liste et rassemblez tous les titres dans un ensemble(), et créez un ordre (par exemple, convertir en liste les trier par ordre alphabétique). Dans la deuxième étape, vous imprimez la table et utilisez la commande générée en tant que noms de colonne, en extrayant les valeurs des dictionnaires si nécessaire (par défaut pour vider les valeurs manquantes), par exemple avec dict.get (nom, "").

+0

Ah fantastique, sonne vraiment utile. Bien que cette méthode ne conserverait pas l'ordre dans lequel les paires 'title/value' sont apparues sur la page. Comment pouvez vous faire ça? – Acorn

+1

Vous pouvez consulter les réponses ici: http://stackoverflow.com/questions/1653970/does-python-have-an-ordered-set pour les implémentations de Sets ordonnés. En outre, à partir de Python 2.7/3.1, il y a un OrderedDict dans la bibliothèque standard: http://docs.python.org/dev/library/collections.html#ordereddict-objects – miles82

+0

J'ai relu cela. Est-ce que les valeurs apparaissent dans le même ordre dans chaque page?Même alors, il sera difficile de reconstruire l'ordre. Vous devez conserver une liste supplémentaire avec la commande (ou l'ensemble ordonné) et déterminer où insérer une nouvelle clé en fonction des clés qui l'entourent. – wump

0

Je suggère que vous pouvez utiliser des paramètres facultatifs, ou bien utiliser des constructeurs surchargées pour remplir les valeurs suivantes:

Page(string animal = string.empty, 
int number = -999, string colour = string.empty, day = string.empty) 

Qu'ou stocker chaque paire clé/valeur comme objet de type, puis le lancer à partir de vos pages .

+0

Cela nécessiterait une connaissance de ce qui pourrait apparaître sur la page, n'est-ce pas? – Acorn

Questions connexes