不了解python中的.get()方法的技巧

时间:2020-04-10 13:12:58

标签: python dictionary

在学习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,为什么要用它。请描述。

6 个答案:

答案 0 :(得分:2)

letternumdict(字典)。它有一个称为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()对此更好。

相关问题