【问题标题】:TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'类型错误:+ 不支持的操作数类型:“NoneType”和“int”
【发布时间】:2015-05-20 15:23:57
【问题描述】:

我正在尝试计算字符串中每个字符的数量

我的代码在这里:

def CharCount(string):
    mydict = {}
    for char in string:
        mydict[char] = mydict.get(char) + 1
    return '\n'.join(['%s,%s' % (c, n) for c, n in mydict.items()])
if __name__ == '__main__':
    print CharCount("abcda")

在运行上面的代码时出现以下错误:

TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'

【问题讨论】:

  • Nonedict.get(char) 返回的内容

标签: python python-2.7


【解决方案1】:

dict.get(key) 默认返回None 如果key 不在字典中。改为提供有用的默认值:

for char in string:
    mydict[char] = mydict.get(char, 0) + 1

不过,还有更好的方法:collections.defaultdict:

from collections import defaultdict
mydict = defaultdict(int)
for char in string:
    mydict[char] += 1

collections.Counter:

from collections import Counter
mydict = Counter(string)

【讨论】:

    【解决方案2】:

    当您第一次访问char 时,dict.get(char) 返回None,而不是0。这应该可以解决:

    mydict[char] = (mydict.get(char) if char in mydict else 0) + 1
    

    【讨论】:

    • 哦,@tim-pietzcker 的回答更好。
    猜你喜欢
    • 2014-03-16
    • 2020-08-26
    • 1970-01-01
    • 2023-02-12
    • 1970-01-01
    • 2019-08-22
    • 2014-04-20
    相关资源
    最近更新 更多