首页 > 解决方案 > 匹配两个列表字段python的最快方法

问题描述

我在最新的 python 脚本中遇到了时间问题。本质上,我有两个列表,例如 List1: ([a,1],[b,2]) List2: ([a,3],[b,4])

现在在上面的示例中,我在每个列表中提供了两个条目。然而,实际上大约有 150,000 个。

在我当前的脚本中,我从第一个列表中检索第一个字段[a]并遍历整个 List2 直到匹配。然后附加两个列表条目。

最终结果将是: ([a,1,3],[b,2,4])

但是,鉴于列表的大小,这将永远持续下去。

有没有办法我可以使用 list1 的字段[a]并在恒定时间内检索 list2 中所有具有[a]

我在网上看到了一些建议集的答案,但我不确定如何实现一个并使用它来解决上述解决方案。

任何帮助,将不胜感激。

进一步的例子:

l1=(['abc123','hi'], ['efg456','bye'])- l1 有大约 2000 个元组

l2=(['abc123','letter'],['abc123','john'],['abc123','leaf'])- l2 有大约 100,000 多个元组

输出: l3=(['abc123','hi','letter'],['abc123','hi','john'],['abc123','hi','leaf'])

标签: python

解决方案


没那么难,只需对 list1 使用一个 dict,对 list2 使用一个 for 循环。

dict1 = {key1: [value1] for key1, value1 in list1}  # convert list1 to dict
                                                    # and the values should be converted to dict
for key2, value2 in list2:
    try:
        dict1[key2].append(value2)
    except KeyError:
        continue  # I'm not sure what do you want to do if the keys in list2 didn't exist in list1, so just ignore them
list3 = tuple([key3, *value3] for key3, value3 in dict1.items())
print(list3)

推荐阅读