在学习python时,我遇到了一行代码,这些代码可以找出字母的数量。
dummy='lorem ipsum dolor emet...'
letternum={}
for each_letter in dummy:
letternum[each_letter.lower()]=letternum.get(each_letter,0)+1
print(letternum)
现在,我的问题是-在letternum.get(each_letter,0)+1
的第四行代码中,为什么要,0)+1
,为什么要用它。请描述。
答案 0 :(得分:2)
letternum
是dict
(字典)。它有一个称为get
的方法,该方法返回与给定键关联的值。如果字典中不存在该键,则它将返回默认值None
,除非存在可选的第二个参数,在这种情况下,将为缺少的元素返回该参数值。
在这种情况下,如果letternum.get(each_letter,0)
在字典中,则letternum[each_letter]
返回each_letter
。否则返回0
。然后代码将此值加1,并将结果存储在letternum[each_letter.lower()]
中。
这会创建每个字母的出现次数计数,只是在更新时会不一致地将字母转换为小写,但在检索现有值时不会转换为小写,因此不适用于大写字母。
答案 1 :(得分:1)
此处介绍了字典上的get
方法:https://docs.python.org/3/library/stdtypes.html#dict.get
get(key [,默认])
如果key在字典中,则返回key的值,否则返回默认值。如果未指定default,则默认为None,因此此方法永远不会引发KeyError。
所以这解释了0
-这是letternum
不包含给定字母时要使用的默认值。
所以我们有了letternum.get(each_letter, 0)
-这个表达式找到了letternum
字典中存储的当前认为字母的值。如果没有存储任何值,则其值为0。
然后我们在此号码上加一个:letternum.get(each_letter, 0) + 1
最后,我们将其存储回letternum
字典中,尽管这次将字母转换为小写:letternum[each_letter.lower()] = letternum.get(each_letter, 0) + 1
看来这可能是一个错误。我们可能想更新刚刚查找的同一项目,但是如果each_letter
是大写字母,那是不正确的。
答案 2 :(得分:0)
根据https://www.tutorialspoint.com/python/dictionary_get.htm中的文档,字典的get方法的第二个参数是一个可选参数,它指定键不在词典中时要输出的默认值。例如:
letternum = {'keyone':1,'keytwo':2}
print(letternum.get('keythree',3))
print(letternum.get('keyone',3))
将先输出3
,然后再输出1
,因为字典中不存在keythree,因此它将在第一个打印语句中输出3
,然后在第二个打印语句中输出1
语句,因为密钥存在。
答案 3 :(得分:0)
.get()简化了缺少对象属性的情况。当在letternum中调用缺少的属性时,与其处理None和异常处理,不如使用get()返回默认的零值
答案 4 :(得分:0)
dict.get()用于从de字典中返回键的值,并且可以接受一到两个参数,第一个是键,第二个(可选)是没有键时要返回的值找到了。如果未指定此值,则在找不到密钥时将返回None。
在您的程序中,如果键each_letter
不在letternum
中,则get方法将返回0,然后加1进行计数。
答案 5 :(得分:0)
如果在each_letter
中找不到letternum
,则将each_letter: 0
插入letternum
中。否则,将插入letternum[each_letter.lower()] +1
中的值。 collections.Counter()
对此更好。