我之前问过一个关于阅读CSV和使用Pandas的问题,虽然这让我更接近我的答案,但这并不是我想要的。
我有两个清单:

a1 = [['1', 'foo'], ['2', 'bar'], ['3', 'Foo']]
a2 = [['1', 'foo'], ['2', 'bar'], ['3', 'Foo'], ['4', 'Bar']]

我想找回这些东西:
A1中不在A2中的所有项,搜索第一个值
a2中不在a1中的所有项,搜索第一个值
a1和a2中的所有项,搜索第一个值
对于此交叉点中的每个项,第二个值匹配的所有项的列表
对于此交叉点中的每个项,第二个值不匹配的所有项的列表
我从我的csv中得到了我想要使用pandas的数据,现在我有了上面显示的列表格式。提前谢谢!

最佳答案

最简单的解决方案是将其转换为集合

a1 = [['1', 'foo'], ['2', 'bar'], ['3', 'Foo']]
a2 = [['1', 'foO'], ['2', 'bar'], ['3', 'Foo'], ['4', 'Bar']]

a1_set = set([v[0] for v in a1])
a2_set = set([v[0] for v in a2])

print("Items in a1,but not a2:",[x for x in a1 if x[0] in a1_set-a2_set])
print("Items in a2,but not a1:",[x for x in a2 if x[0] in a2_set-a1_set])

d1 = dict(a1)
d2 = dict(a2)
items_in_both = [(k,(d1[k],d2[k]) if d1[k] != d2[k] else d1[k]) for k in a2_set&a1_set]

print("Items in both sets:", items_in_both)

10-02 03:47
查看更多