合并两个字典?

时间:2019-05-20 10:09:46

标签: python python-3.x dictionary

我制作了两个函数来计算文本文件中的标点符号。这些标点符号是逗号,撇号,连字符和分号。逗号和分号的计算很简单,但是计算撇号和连字符比较复杂,因为我必须遵循某些规则(根据我的分配),例如我只能算一个单引号,如果它介于两个字母之间,例如in不应,不会等。因此,我将该任务分为两个功能:countpunc1()countpunc2()

在这两种方法的最后,我返回一个包含这些标点符号数量的字典。

然后在函数main()中,我希望能够返回一个字典,该字典将countpunc1countpunc2的结果组合成一个键:punctuations

示例显示在底部。

这是我的代码:


def countpunc1(text):

    for ch in '0123456789abcdefghijklmnopqrstuvwxyz!"#$%&()*+./:<=>?@[\\]^_`{|}~-':
        text = text.replace(ch, '')
    words = text.replace('--', '').replace("'", '').split()       
    wordlist = list(words)

    dictToReturn = {}
    punctuations = [',', ';']

    punclist = list(i for i in wordlist if i in punctuations) 

    for x in range(len(punctuations)):
        dictToReturn[punctuations[x]] = dictToReturn.get(x,0)
    for p in punclist:
        dictToReturn[p] = dictToReturn.get(p,0) + 1

    return dictToReturn


def countpunc2(text):
    for ch in '!"#$%&()*+./:<=>?@[\\]^_`{|}~':
        text = text.replace(ch, ' ')
    words = text.replace('--', ' ').split('\n')    
    wordlist = str(words)

    punctuations = "'-"          

    dictToReturn = {}
    letters = "abcdefghijklmnopqrstuvwxyz"
    for i, char in enumerate(wordlist):
        if i < 1:
            continue
        if i > len(wordlist) - 2:
            continue
        if char in punctuations:
            if char not in dictToReturn:
                dictToReturn[char] = 0
            if wordlist[i-1] in letters and wordlist[i+1] in letters:
                dictToReturn[char] += 1

    return dictToReturn

def main(text):
    text = open(text, 'r').read().lower()
    profileDict = {}
    # profileDict[punctuations] = ??
    return profileDict

在上面第二行中,我尝试执行以下操作:

profileDict[punctuations] = countpunc1(text) + countpunc2(text)

profileDict[punctuations] = countpunc1(text).items() + countpunc2(text).items()

显然所有这些都是错误的,我得到了TypeError: unsupported operand type(s)

预期结果是这样的:

例如:dict[punctuations] = {",": 9, "'" : 0, ";" : 4, "-" : 11}

PS。当我在多个文本文件上对其进行测试时,该功能本身可以正常工作。

0 个答案:

没有答案