【问题标题】:Speed up dictionary merging with soft conjunction logic使用软连词逻辑加速字典合并
【发布时间】:2017-04-21 17:49:32
【问题描述】:

我有一个包含<word: dictionary>pairs 的查找表。 然后,给定一个单词列表, 我可以使用这个查找表生成一个字典列表。 (每次这个词表的长度都是不固定的)。 这些字典中的值表示某些键的对数概率。

这是一个例子:

给定一个单词列表

['fruit','animal','plant'],

我们可以查看查找表并有

dict_list = [{'apple':-1, 'flower':-2}, {'apple':-3, 'dog':-1}, {'apple':-2, 'flower':-1}].

我们可以从列表中看到我们有一组键:{'apple', 'flower', 'dog'}

对于每个键,我想给出 dict_list 中每个值的总和。而如果某个字典中不存在某个键,那么我们在该值上加上一个小的值-10(可以将-10视为一个非常小的对数概率)。

结果字典如下所示: dict_merge = {'apple':-6, 'flower':-13, 'dog':-21}, 因为'apple' = (-1) + (-3) + (-2)'flower' = (-2) + (-10) + (-1)'dog' = (-10) + (-1) + (-10)

这是我的 python3 代码:

dict_list = [{'apple':-1, 'flower':-2}, {'apple':-3, 'dog':-1}, {'apple':-2, 'flower':-1}]

key_list = []
for dic in dict_list:
    key_list.extend(dic.keys())

dict_merge = dict.fromkeys(key_list, 0)
for key in dict_merge:
    for dic in dict_list:
        dict_merge[key] += dic.get(key, -10)

这段代码可以运行,但是如果dict_list中的某些字典的大小超大(例如100,000),那么它可能需要200ms以上,这在实践中是不可接受的。 p>

主要计算在for key in dict_merge 循环中,想象它是一个大小为 100,000 的循环。

是否有任何加速解决方案?谢谢!还有,感谢阅读~可能太长太烦人了……

附: 查找表中只有少数字典具有超大尺寸。所以这里可能会有一些机会。

【问题讨论】:

    标签: python dictionary nlp search-engine boolean-logic


    【解决方案1】:

    据我所知,sum(len(d) for d in dict_list)len(key_list) * len(dict_list) 小得多。

    from collections import defaultdict
    
    dict_list = [{'apple':-1, 'flower':-2}, {'apple':-3, 'dog':-1}, {'apple':-2, 'flower':-1}]
    
    default_value = len(dict_list) * (-10)
    dict_merge = defaultdict(lambda: default_value)
    for d in dict_list:
        for key, value in d.items():
            dict_merge[key] += value + 10
    

    【讨论】:

    • 这是一个非常好的答案 - 你能解释一下这与原始算法有何不同以及为什么它最终会产生相同的结果
    • 谢谢!是的,这更快。但是由于len(dict_list)总是小于3,最后还是要扫描keys_number,所以速度并没有那么快。
    • @DongxuZhang 我已经更新了答案,现在我们不需要对键进行两次迭代了。
    • @f1u77y 酷!太棒了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    • 2017-02-23
    • 2019-08-08
    • 2018-10-15
    • 2014-01-20
    相关资源
    最近更新 更多