我之前问过一个关于阅读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)