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

问题描述 投票:0回答:6

在学习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
的第 4 行代码中,为什么有
,0)+1
以及为什么使用它。请描述一下。

python dictionary
6个回答
7
投票

字典上的

get
方法记录在此处:https://docs.python.org/3/library/stdtypes.html#dict.get

获取(键[,默认])

如果 key 在字典中,则返回 key 的值,否则返回默认值。如果未给出默认值,则默认为 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
是大写,那就不是真的。


3
投票

letternum
dict
(字典)。 它有一个名为
get
的方法,它返回与给定键关联的值。 如果字典中不存在该键,它将返回一个默认值,即
None
,除非存在可选的第二个参数,在这种情况下,将为缺失的元素返回该参数值。

在这种情况下,如果

letternum.get(each_letter,0)
在字典中,则
letternum[each_letter]
返回
each_letter
。 否则返回
0
。 然后代码将该值加 1 并将结果存储在
letternum[each_letter.lower()]
中。

这会创建每个字母出现次数的计数,但它在更新时不一致地将字母转换为小写,但在检索现有值时则不然,因此它无法正确处理大写字母。


0
投票

根据https://www.tutorialspoint.com/python/dictionary_get.htm中的文档,字典的get方法的第二个参数是一个可选参数,它指定当key为key时要输出的默认值字典里没有。例如:

letternum = {'keyone':1,'keytwo':2}
print(letternum.get('keythree',3))
print(letternum.get('keyone',3))

会输出

3
,然后输出
1
,因为字典中不存在 key Three,因此它会在第一个打印语句中输出
3
,然后在第二个打印语句中输出
1
,因为键存在。


0
投票

.get() 简化了缺少对象属性的情况。 get() 用于返回默认的零值,而不是在 letternum 中调用缺失属性时处理 None 和异常处理。


0
投票
dict.get() 用于从字典中返回键的值,可以接受一到两个参数,第一个是键,第二个(可选)是未找到键时要返回的值。如果未指定此值,则在未找到密钥时将返回 None。

在你的程序中,如果键

each_letter

不在
letternum
中,get方法将返回0,然后加1进行计数。


0
投票
如果在

each_letter

中找不到
letternum
,则将
each_letter: 0
插入到
letternum
中。否则,将插入 
letternum[each_letter.lower()] +1
 中的值。 
collections.Counter()
 更适合这个。

© www.soinside.com 2019 - 2024. All rights reserved.