mua*_*aiz 2 python mapping tuples list
我有两个元组列表
a = [('head1','a'),('head2','b'),('head3','x'),('head4','z')]
b = [('head5','u'),('head6','w'),('head7','x'),('head8','y'),('head9','z')]
Run Code Online (Sandbox Code Playgroud)
我想取每个元组的第二个元素的交集,例如集合{a[0][0],a[0][1],a[0][2],a[0][3]}与{b[0][0],b[0][1],b[0][2],b[0][3],b[0][4]}列表中的集合的交集a,并且b如果交集值存在,则它返回元组的第一个元素映射。结果输出应如下所示:
res = [('head3','head7'),('head4','head9')]
Run Code Online (Sandbox Code Playgroud)
到目前为止我已经尝试过这个:
x = [(a[i][0],b[j][0]) for i in range(len(a)) for j in range(len(b)) if a[0][i] == b[0][j]]
Run Code Online (Sandbox Code Playgroud)
但出现错误IndexError: tuple index out of range
这样做的正确且最快的方法是什么?
您可以在 Python 3 中执行以下操作。从列表中创建字典,获取两个字典中键的交集,获取键处的相应值:
>>> da = {k:v for v, k in a}
>>> db = {k:v for v, k in b}
>>> [(da[k], db[k]) for k in da.keys()&db.keys()]
[('head4', 'head9'), ('head3', 'head7')]
Run Code Online (Sandbox Code Playgroud)
在 Python 2 中,您可以使用set(da).intersection(db)代替da.keys()&db.keys().
| 归档时间: |
|
| 查看次数: |
5704 次 |
| 最近记录: |