如何根据索引值匹配值?

时间:2012-10-01 03:31:20

标签: python export-to-csv

有时我会遇到两个数据集中信息存在的问题。虽然很麻烦但我使用Access配对数据然后将其导出为CSV。其他时候我使用for循环迭代两个列表并匹配数据,但它不能很好地扩展。

我想知道Python中是否有更有效的方法来“链接”数据。以下是我正在谈论的一个例子

在这种情况下,一个数据集包含品牌和型号,另一个包含原产国。我希望能够将A组和B组中的数据合并到一个数据集中进行导出,分析等。

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

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

一如既往的任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:3)

我认为您可以考虑将collections.namedtuple用于此目的:

>>> 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']]

它更具可读性,允许更有趣的操作。


不使用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']]