我不知道有一个库在做你要求的事情(但我只看了sqldf 文档),但是你所问的并没有真正需要一个库,它们是 python 中的单行代码(你可以当然抽象的功能是创建一个函数而不是一个简单的列表理解......)
设置 A= {1,0},列表 B = [[1,1],[2,3]]。我想在 B 中找到所有行,其中第二列是 A 中的值之一。
>>> a = set([1, 0])
>>> b = [[1,1],[2,3]]
>>> [l for l in b if l[1] in a]
[[1, 1]]
我有 2 个 CSV 文件。我想找出两个文件中某些列的值匹配的所有行。
>>> f1 = [[1, 2, 3], [4, 5, 6]]
>>> f2 = [[0, 2, 8], [7, 7, 7]]
>>> [tuple_ for tuple_ in zip(f1, f2) if tuple_[0][1] == tuple_[1][1]]
[([1, 2, 3], [0, 2, 8])]
编辑:如果内存使用有问题,您应该使用生成器而不是列表。例如:
>>> zip(f1, f2)
[([1, 2, 3], [0, 2, 8]), ([4, 5, 6], [7, 7, 7])]
但使用生成器:
>>> import itertools as it
>>> gen = it.izip(f1, f2)
>>> gen
<itertools.izip object at 0x1f24ab8>
>>> next(gen)
([1, 2, 3], [0, 2, 8])
>>> next(gen)
([4, 5, 6], [7, 7, 7])
对于数据源:
>>> [line for line in f1]
[[1, 2, 3], [4, 5, 6]]
将生成器翻译为:
>>> gen = (line for line in f1)
>>> gen
<generator object <genexpr> at 0x1f159b0>
>>> next(gen)
[1, 2, 3]
>>> next(gen)
[4, 5, 6]