字典中的Python计数项目

时间:2018-07-09 14:43:22

标签: python dictionary if-statement count try-except

我想计算部分语音标签。到目前为止,我已经将部分语音标签(德语)存储在字典中,POS标签的键在哪里,出现次数的值是。

当我计数时,我想将'NN'和'NE'概括为一个变量'nouns_in_text',因为它们都是名词。我做了部分成功。当输入文本中同时具有“ NN”和“ NE”时,在这种情况下,我的代码可以正常工作,并且得到正确的结果,即“ NN”和“ NE”的总和。

但是问题是,当我有一个输入文本(例如,只有“ NN”而没有“ NE”)时,出现了KeyError。

我需要代码来查看输入文本中是否有“ NN”或“ NE”。如果有“ NN”和“ NE”,则将它们加起来。如果只有“ NN”,则仅返回“ NN”的出现次数,如果只有“ NE”,则返回相同次数。如果既没有“ NN”也没有“ NE”,则返回0或“无”。

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

# 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块解决此问题。但是我不确定如何实现这些想法...有什么建议吗?提前非常感谢您! :-)

4 个答案:

答案 0 :(得分:5)

使用dict.get并接受参数(key, default),因此,如果key中没有document,则会返回default

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

答案 1 :(得分:2)

这应该做到:

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

答案 2 :(得分:2)

使用defaultdict代替dict

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

使用此功能,您当前的check_pos_tag函数无需任何修改即可正常工作

check_pos_tag(myInput)
# 3

答案 3 :(得分:1)

详细版本:

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