Python 计算字典中的项目数

Python Count Items in Dictionary

我想统计词性标签。到目前为止,我已经将词性标签(对于德语)存储在字典中,其中 POS 标签是键,出现次数是值。

我数的时候想把'NN'和'NE'归纳为一个变量'nouns_in_text',因为它们都是名词。我部分成功地做到了这一点。当我有一个包含 'NN' 和 'NE' 的输入文本时,在这种情况下,我的代码可以正常工作,并且我得到了正确的结果,这意味着 'NN' 和 'NE'.

但问题是,当我有一个输入文本时,例如只有 'NN' 而没有 'NE',然后我得到一个 KeyError。

我需要代码来查看输入文本中是否有 'NN' 或 'NE'。如果有'NN'和'NE',则求和。如果只有 'NN' 那么 return 就是 'NN' 出现的次数,如果只有 'NE' 也一样。如果既没有 'NN' 也没有 'NE' return 0 或 "None".

我想要一个代码,它适用于以下描述的所有三个场景,而不会出现错误。

# First Scenario: NN and NE are in the Input-Text
myInput = {'NN': 3, 'NE': 1, 'ART': 1, 'KON': 1}

# Second Scenario: Only NN is in the Input-Text
#myInput = {'NN': 3, 'ART': 1, 'KON': 1}

# Third Scenario: Neither NN nor NE are in the Input-Text
#myInput = {'ART': 1, 'KON': 1}

def check_pos_tag(document):
    return document['NN'] + document['NE']

nouns_in_text = check_pos_tag(myInput)
print(nouns_in_text)

# Output = If NN and NE are in the input text I get 4 as result
# But, if NN or NE are not in the input text I get a KeyError

我认为我可以或应该使用 if-else 条件或 try-except 块来解决这个问题。但我不确定如何实现这个想法......有什么建议吗?非常感谢您! :-)

应该这样做:

def check_pos_tag(document):
    return document.get('NN', 0) + document.get('NE', 0)

使用 dict.get 接受参数 (key, default) 因此如果 key 不在 document 中则返回 default

def check_pos_tag(document):
    return document.get('NN', 0) + document.get('NE', 0)

详细版本:

def check_pos_tag(document):
    nn = document['NN'] if 'NN' in document else 0
    ne = document['NE'] if 'NE' in document else 0
    return nn + ne

使用defaultdict代替dict

from collections import defaultdict
myInput = defaultdict(int, {'NN': 3, 'ART': 1, 'KON': 1})

有了这个,您当前的 check_pos_tag 功能无需任何修改即可运行

check_pos_tag(myInput)
# 3