什么是 Python 2 的 multidict 易于适应的替代方案?

Posted

技术标签:

【中文标题】什么是 Python 2 的 multidict 易于适应的替代方案?【英文标题】:What is an easy to adapt alternative to multidict for Python 2? 【发布时间】:2020-02-24 19:00:28 【问题描述】:

标题说明了一切。

我正在尝试从不支持 Python 3 的 virtualenv 和 as multidict doesn't support Python 2 运行对 this code 的改编,我想在考虑更改之前考虑可以与 Python 2 一起使用的此模块的替代方案我的主人。

使用multidict功能的代码的关键部分如下:

def getFrequencyDictForText(sentence):
    fullTermsDict = multidict.MultiDict()
    tmpDict = 

    # making dict for counting frequencies
    for text in sentence.split(" "):
        if re.match("a|the|an|the|to|in|for|of|or|by|with|is|on|that|be", text):
            continue
        val = tmpDict.get(text, 0)
        tmpDict[text.lower()] = val + 1
    for key in tmpDict:
        fullTermsDict.add(key, tmpDict[key])
    return fullTermsDict

提前致谢!

【问题讨论】:

没错,@Carcigenicate。这是一个我忽略的好方法,以便找到某种适当的方法来使用类似的模块来做到这一点,但如果我找不到它,那就必须是这种情况。 tmpDict 是一个常规字典(因此键形成一个集合),这意味着 fullTermsDict 也可以是常规字典;您永远不会尝试向其添加相同的密钥两次。实际上,您只需要一个 collections.Counter 的实例。 【参考方案1】:

我认为可以使用带有默认列表值的defaultdict 来获得近似值:

# Each new value is created by calling the "list" function
# Saves you from needing to do a "if key not in fullTermsDict" check prior to "append"ing
fullTermsDict = defaultdict(list)  

. . .

fullTermsDict[key].append(tmpDict[key])

附注:Python 更喜欢snake_case,而不是camelCase。

【讨论】:

再一次好点。在修改它的同时,我正在使这段代码适应我的最终约定,但我仍在学习,所以我对发送拉取请求感到不舒服,例如。无论如何,非常感谢你为这个话题带来的启发!【参考方案2】:

您不需要成熟的多语种;你只需要一个Counter

from collections import Counter

def get_frequency_dict_for_text(sentence):
    skip_words = "a", "the", "an", ...

    words = (x.lower() for x in sentence.split(" ") if x not in skip_words)
    return Counter(words)

【讨论】:

以上是关于什么是 Python 2 的 multidict 易于适应的替代方案?的主要内容,如果未能解决你的问题,请参考以下文章

MultiDict 错误 Django

从 pyspark 数据框创建 multidict

指数函数的 SCIP 优化

python 里 np.array 的shape (2,)与(2,1)的分别是什么意思,区别是什么?

python-知识点的复习

Python02.1.什么是数据