2

有时我会遇到信息在两个数据集中的问题。虽然很麻烦,但我使用 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']]

一如既往地感谢任何帮助!

4

1 回答 1

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']]
于 2012-10-01T03:47:21.017 回答