Python 中两个列表的交叉

Crossover of two Lists in Python

我有2个包含数万条记录的列表如下:

list1=[
"c:\user",
"C:\Windows\app\Prog\folder2\folder3",
"C:\Windows\app\Prog\folder2",
"C:\Intel\Profiles\user3\se",
"C:\Win\add\folder1"
]

list2=[
"C:\Win\add",
"C:\Windows\app\Prog",
"C:\Intel\Profiles"
]

我需要交叉这两个列表并将结果放入字典列表中,如下所示:

dic=[
  {"k1": "c:\user","k2": ""},
  {"k1": "C:\Windows\app\Prog\folder2\folder3", "k2": "C:\Windows\app\Prog"},
  {"k1": "C:\Windows\app\Prog\folder2", "k2": "C:\Windows\app\Prog"},
  {"k1": "C:\Intel\Profiles\user3\se", "k2": "C:\Intel\Profiles"}
  {"k1": "C:\Win\add\folder1", "k2": "C:\Win\add"}
]

我是这样解决的,但是执行起来很慢,因为列表可能有几十万条记录。

def mergelists(list1,list2):
   dic=[]
   for i in range(len(list1)):
        fitem1=list1[i]
        result = [element for element in list2 if element in fitem1]
        row = {"k1": fitem1, "k2": result[0]}
        dic.append(row)
   return (dic)

如何提高执行速度?

一个明显的加快速度的方法是改变

result = [element for element in list2 if element in fitem1]
row = {"k1": fitem1, "k2": result[0]}

result = next(element for element in list2 if element in fitem1)
row = {"k1": fitem1, "k2": result}

因为目前代码继续在整个 list2 中搜索与 fitem1 匹配的元素,即使已经找到了一个。

一旦找到一个元素,next 函数将 return 并跳过搜索剩余的 list2