Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 更快地匹配文本文件中的id并检索相应值_Python_Algorithm_Search - Fatal编程技术网

Python 更快地匹配文本文件中的id并检索相应值

Python 更快地匹配文本文件中的id并检索相应值,python,algorithm,search,Python,Algorithm,Search,我有两个文本文件,第一个的简化版本如下: 第一个字段字母是唯一的值,第二个字段编号不是唯一的。该文件有7行,实际文件有100多万行。第二个文件如下所示: 它有一个字段,和第一个文件一样,它是唯一的。第二个文件中的所有值都在第一个文件中,但反之亦然。因此,第二个文件的条目较少。它也没有第二个字段号 我的问题是:将第二个文件中的值与第一个文件中的值进行匹配并找到相应数字的最快方法是什么?因此,我的目标是: 我现在就是这样做的: with open("file_2") as f2: for

我有两个文本文件,第一个的简化版本如下:

第一个字段字母是唯一的值,第二个字段编号不是唯一的。该文件有7行,实际文件有100多万行。第二个文件如下所示:

它有一个字段,和第一个文件一样,它是唯一的。第二个文件中的所有值都在第一个文件中,但反之亦然。因此,第二个文件的条目较少。它也没有第二个字段号

我的问题是:将第二个文件中的值与第一个文件中的值进行匹配并找到相应数字的最快方法是什么?因此,我的目标是:

我现在就是这样做的:

with open("file_2") as f2:  
    for l in f2:
        with open("file_1") as f1:
            for line in f1:
                if l["letter"] == line["letter"]:
                    print(line["number"])

但这种方法需要几天时间,有没有更快的方法?我读过关于sets的书,但这是用来检查文件中是否有字母,然后我无法检索到数字。

我想你读了文件1好几遍了。这是文件2的行计数

我想你最好读一下文件1

以及使用文件2中的keysletter过滤文件_1的数据

def parse(line):
  # DO SOMETHING
  return (letter, number)
def getletter(line):
  # DO SOMETHING
  return letter

with open("file_2") as f2:
  letters = map(getletter, f2.readlines)
  with open("file_1") as f1:
    letter_number = map(parse, f1.readlines)
    result = list(filter(lambda x: x[0] in letters, letter_number))
    # result is (letter, number) entries

使用字典。使用dict或pandas将第二个文件读入一个集合,然后循环第一个文件并输出集合中第一列所在的行。。。