2012-10-01 2 views
2

Parfois, je rencontre des problèmes où l'information est dans deux jeux de données. Bien qu'encombrant, j'utilise Access pour coupler les données, puis les exporter vers un fichier CSV. D'autres fois, j'utilise les boucles pour parcourir les deux listes et faire correspondre les données, mais elles ne sont pas bien adaptées.Comment faire correspondre des valeurs basées sur une valeur d'index?

Je me demandais s'il y avait des méthodes plus efficaces en Python pour "lier" des données. Voici un exemple de ce dont je parle

Dans ce cas, un jeu de données contient la marque et le modèle, l'autre contient le pays d'origine. Je voudrais être en mesure de combiner les données dans des ensembles A et B dans un ensemble de données pour l'exportation, l'analyse, etc.

A=[['Chevy','Suburban'],['Toyota','Camry'],['Honda','Civic']] 
B=[['Chevy','America'],['Toyota','Japan'],['Honda','Japan']] 

AB =[['Chevy','Suburban','America'],['Toyota','Camry','Japan'],['Honda','Civic','Japan']] 

Comme toujours toute aide est appréciée!

+1

Peut-être quelque chose comme ça? 'map (lambda x: x [0] + [x [1] [1]], zip (A, B))' – Blender

+0

Dans ce cas, ils sont dans l'ordre, mais dans la plupart des cas ils ne le sont pas. Le code semble pratique cependant! Je vais l'enregistrer dans ma bibliothèque d'extraits – canyon289

Répondre

3

Je pense que vous pouvez envisager d'utiliser collections.namedtuple à cet effet:

>>> from collections import namedtuple 
>>> MakeOrigin = namedtuple('MakeOrigin', ['make', 'origin']) 
>>> MakeModel = namedtuple('MakeModel', ['make', 'model']) 
>>> A = [MakeModel('Chevy', 'Suburban'), MakeModel('Toyota', 'Camry'), MakeModel('Honda', 'Civic')] 
>>> B = [MakeOrigin('Chevy', 'America'), MakeOrigin('Toyota', 'Japan'), MakeOrigin('Honda', 'Japan')] 
>>> AB = [[a.make, a.model, b.origin] for a in A for b in B if a.make == b.make] 
>>> AB 
[['Chevy', 'Suburban', 'America'], ['Toyota', 'Camry', 'Japan'], ['Honda', 'Civic', 'Japan']] 

Il est plus lisible et permet des opérations plus intéressantes.


Sans utiliser namedtuple:

>>> A=[['Chevy','Suburban'],['Toyota','Camry'],['Honda','Civic']] 
>>> B=[['Chevy','America'],['Toyota','Japan'],['Honda','Japan']] 
>>> 
>>> AB = [[a[0], a[1], b[1]] for a in A for b in B if a[0] == b[0]] 
>>> AB 
[['Chevy', 'Suburban', 'America'], ['Toyota', 'Camry', 'Japan'], ['Honda', 'Civic', 'Japan']] 
Questions connexes