python - 如何更快地从字符串列表构建自定义字典
问题描述
背景
我想创建字典,每个单词都有一个唯一的 id 用于词嵌入目的。数据集如下所示:
s_lists = [['I', 'want', 'to', 'go', 'to', 'the', 'park'],
['I', 'want', 'to', 'quit', 'the', 'team']]
以下功能正在构建字典
def build_dict(input_list, start=2):
"""
build dictionary
start with 2,1 for unknow word,0 for zero padding
:param input_list:
:param start:
:return: custom dictionary
"""
whole_set = set()
for current_sub_list in input_list:
# remove duplicate elements
current_set = set(current_sub_list)
# add new element into whole set
whole_set = whole_set | current_set
return {ni: indi + start for indi, ni in enumerate(whole_set)}
它工作并输出
{'I': 7,'go': 2,'park': 4,'quit': 8, 'team': 6,'the': 5,'to': 9,'want': 3}
问题
当我将它用于大型数据集(大约 50w 个字符串)时,它将花费大约30 秒(ENV mbpr15-i7)。它太慢了,我想寻找一个解决方案来提高性能,但我现在不知道。
解决方案
试试下面的代码itertools.chain
。在我的测试用例中,它的工作速度大约是 x4:
from itertools import chain
start = 2
{it: n + start for n, it in enumerate(set(chain(*s_lists)))}
推荐阅读
- matlab - fft 的不同绘图形状取决于时间样本间距
- html - div未按顺序显示
- php - 过滤查询无法通过 Laravel 查询生成器工作
- excel - 有没有办法在 Excel 中对“除此之外的所有内容”进行条件格式设置
- r - 在R中的森林图中(metafor包)减少`xlab`和x轴之间的空间
- pdfbox - Apache Tika 输出中的未定义字符替换文本(例如“ti”、“fb”)
- r - 如何在 R 中 left_join 并将值重复加入多个变量?
- machine-learning - 2.3 Pytorch BCEloss与我自己的“log”计算的比值
- python - 具有持续时间的总和列 (HH:MM:SS)
- neo4j - neo4j 创建子节点并将其链接到另一个子节点