我有一组需要根据键查找的数据:
# fk is a comparsion function
# Keys go from 1 to n
# Assume that this is done whilst going through rows that have said keys and item inside
if f1(key1, val1) and f2(key2, val2)... and fn(keyn, valn):
return item
什么是最有效的数据结构&用于进行这种查找的算法集成在python中。优选地存在于默认库中或维护良好的库中。目前我正在寻找类似于boost的多图的东西,但我认为可能有更好的方法。
在我的情况下,我有3个键,比较函数是'<','>'并且'=='但我问这个一般情况,因为我假设可能会弹出类似的问题(或者之前可能已经弹出,我找不到它们)。
答案 0 :(得分:0)
from functools import partial
from operator import lt, le, eq, ne, ge, gt
from pprint import pprint as pp
def data_extract(funcs, keys, table):
assert len(funcs) == len(keys) == len(table[0]), \
'Error: incompatable data sizes'
# substitutes for *first* param
pfuncs = [partial(f, k) for f, k in zip(funcs, keys)]
return [row for row in table
if all(p(value)
for p, value in zip(pfuncs, row))]
def skip(a, b):
return True
tbl = [[1, 2, 3],
[2, 3, 4],
[4, 6, 8],
[10, 12, 14],
# ... millions
]
fn = [ge, le, skip]
ks = [12, 6, None]
ans = data_extract(fn, ks, tbl)
pp(ans) # [[4, 6, 8], [10, 12, 14]]
希望以上是对您问题的正确解释。如果每次调用函数时funcs
和/或keys
都会发生变化,我就无法理解如何使用dict来提供帮助。
skip
只是表明该表格中的数据是“不关心”的一种方式。