我有一个大的静态text / csv文件,其中包含大约10万行(2MB)。它本质上是一个字典,我需要在Python中对这些数据进行定期查找。
该文件的格式为:
key value1 value2
alpha x1 x2
alpha beta y1 y2
gamma z1 z2
...
这是Web应用程序的一部分,每个用户一次只能查找100-300个密钥,并且每个密钥都可以获得值1和值2。应用程序上最多有100个用户,每个用户通过相同的数据查找这些100-300个密钥。
我只需要返回第一个完全匹配。例如,如果用户搜索了密钥[alpha, gamma]
,我只需要返回[('x1','x2'), ('z1','z2')]
,它代表'alpha'和'gamma'的第一个完全匹配。
我一直在阅读我的选项,我真的很喜欢你对以下哪种方法最适合我的用例的意见。
我对这些想法非常开放,我绝不限于上述四种选择!
谢谢 :)
类似于方法#2的事情怎么样?您仍然可以将文件读入内存,但不是将其存储到列表中,而是使用二进制搜索来搜索键,您可以将文件存储到hash map中。
这样做的好处是利用哈希映射的O(1)
的平均查找时间与O(n)
的最坏情况。时间复杂性的好处和理由可以找到here和here。由于您只是查找键,因此查找持续查找时间将是搜索文件的好方法。这种方法也比二进制搜索的平均O(log n)
搜索时间更快。
您可以将文件存储为
table = {
key1: (value1, value2),
key2: (value1, value2),
key2: (value1, value2)
}
请注意,只有当您的密钥都是不同的且没有重复密钥时,此方法才可行。