我有两个数组:
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
获取的值来扩展该行。有没有人有一个优雅的方法来做到这一点?
答案 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']]
>>>