python通过键列组合两个数组

时间:2014-08-07 20:57:56

标签: arrays python-2.7

我有两个数组:

a = [['a', '11', '111'],['b','22','222'],['a','33','333'],['b','44','444']]
b = [['a','0.1','1'],['b','0.9','0']]

我想根据第一列合并a和b,得到如下结果:

[['a', '11', '111', '0.1', '1'], ['b', '22', '222', '0.9', '0'], ['a','33','333', '0.1', '1'], ['b','44','444', '0.9', '0']]

我将数组b作为字典并循环a中的每一行,并使用从字典b获取的值来扩展该行。有没有人有一个优雅的方法来做到这一点?

4 个答案:

答案 0 :(得分:0)

使用pandas,您可以使用pandas.merge获取结果:

In [72]: a = [['a', '11', '111'],['b','22','222'],['a','33','333'],['b','44','444']]

In [73]: b = [['a','0.1','1'],['b','0.9','0']]

In [74]: import pandas as pd

In [75]: a = pd.DataFrame(a, columns=('key', 'col1', 'col2'))

In [76]: b = pd.DataFrame(b, columns=('key', 'col3', 'col4'))

In [77]: df = pd.merge(a, b, on=['key']); df
Out[77]: 
  key col1 col2 col3 col4
0   a   11  111  0.1    1
1   a   33  333  0.1    1
2   b   22  222  0.9    0
3   b   44  444  0.9    0

In [81]: df.values.tolist()
Out[84]: 
[['a', '11', '111', '0.1', '1'],
 ['a', '33', '333', '0.1', '1'],
 ['b', '22', '222', '0.9', '0'],
 ['b', '44', '444', '0.9', '0']]

答案 1 :(得分:0)

您提出的方法非常优雅:

>>> a = [['a', '11', '111'],['b','22','222'],['a','33','333'],['b','44','444']]
>>> b = [['a','0.1','1'],['b','0.9','0']]
>>> b_ex = dict([(l[0], l[1:]) for l in b])
>>> [x+b_ex[x[0]] for x in a]
[['a', '11', '111', '0.1', '1'], ['b', '22', '222', '0.9', '0'], ['a', '33', '333', '0.1', '1'], ['b', '44', '444', '0.9', '0']]

答案 2 :(得分:0)

简单,使用嵌套列表推导:

>>> [a1 + [b1[1:] for b1 in b if b1[0] == a1[0]][0] for a1 in a]
[['a', '11', '111', '0.1', '1'], 
 ['b', '22', '222', '0.9', '0'], 
 ['a', '33', '333', '0.1', '1'], 
 ['b', '44', '444', '0.9', '0']]

答案 3 :(得分:0)

它看起来如何:[(x+b[x[0]]) for x in a]

详细说明:

>>> a = [['a', '11', '111'], ['b', '22', '222'], ['a', '33', '333'], ['b', '44', '444']]
>>> b = {'a': ['0.1', '1'], 'b': ['0.9', '0']}
>>> [(x+b[x[0]]) for x in a]
[['a', '11', '111', '0.1', '1'], ['b', '22', '222', '0.9', '0'], ['a', '33', '333', '0.1', '1'], ['b', '44', '444', '0.9', '0']]
>>>