首页 > 解决方案 > 如何更快地从字符串列表构建自定义字典

问题描述

背景

我想创建字典,每个单词都有一个唯一的 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)。它太慢了,我想寻找一个解决方案来提高性能,但我现在不知道。

标签: pythonalgorithmset

解决方案


试试下面的代码itertools.chain。在我的测试用例中,它的工作速度大约是 x4:

from itertools import chain

start = 2
{it: n + start for n, it in enumerate(set(chain(*s_lists)))}

推荐阅读