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
我想统计词性标签。到目前为止,我已经将词性标签(对于德语)存储在字典中,其中 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