python - 匹配两个列表字段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'])
解决方案
没那么难,只需对 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)
推荐阅读
- android - Android活动场景过渡不同的动画目标
- mysql - Sql存储过程速度问题
- javascript - 使用 Vuetify 缓慢滚动回顶部
- javascript - 在事件 IONIC V1 之后增加 Firebase 子值
- python - 如何使用正则表达式定位文件夹中的文件夹
- java - 更改 JScrollPane 的视图,以便 JEditorPane 的某个部分可见
- android - 使用 webview 在 iframe 中自动播放 youtube 的工作示例?
- vue.js - 为 vuex / nuxtClientInit 创建了钩子?
- amazon-web-services - 授予对具有给定标签的 AWS Lambda 资源的访问权限
- c++ - 从“*”类型的表达式中对“&”类型的引用进行无效初始化