Python中的KeyError

时间:2019-08-16 18:44:57

标签: python bigdata

我正在尝试计算列表中每个字符串重复的次数,但它不断给我KeyError:

def gono(l):
    f={}
    for h in l:
        if(f.get(f[h])):
            f[h] += 1
        else:
            f[h]=1
    return f
Error content :
KeyError                                  Traceback (most recent call last)
<ipython-input-68-e02904625299> in <module>
     23             f[h]=1
     24     return f
---> 25 v=gono(h)
     26 v
     27 

<ipython-input-68-e02904625299> in gono(l)
     18     f={}
     19     for h in l:
---> 20         if(f.get(f[h])):
     21             f[h] += 1
     22         else:

KeyError: 'CLOSED'

列表是: ['关闭',  '待付款',  '完成',  '关闭',  '完成',  '完成',  '完成',  “处理中”,  '待付款',  'PENDING_PAYMENT']

3 个答案:

答案 0 :(得分:1)

只需使用Counter

from collections import Counter
def gono(l):
    return Counter(l)

示例结果:

>>> gono(['CLOSED', 'PENDING_PAYMENT', 'COMPLETE', 'CLOSED', 'COMPLETE', 'COMPLETE', 'COMPLETE', 'PROCESSING', 'PENDING_PAYMENT', 'PENDING_PAYMENT'])
Counter({'COMPLETE': 4, 'PENDING_PAYMENT': 3, 'CLOSED': 2, 'PROCESSING': 1})

答案 1 :(得分:0)

我认为这个问题不属于“数据科学”,这更多是一个python编码问题。无论如何,当您首先调用该函数时,字典似乎为空。在这种情况下如何调用f [h]而不会出现键错误?

答案 2 :(得分:0)

为什么不使用

mylist= ['CLOSED', 'PENDING_PAYMENT', 'COMPLETE', 'CLOSED', 'COMPLETE', 'COMPLETE', 'COMPLETE', 'PROCESSING', 'PENDING_PAYMENT', 'PENDING_PAYMENT']
mylist.count("CLOSED")