理解Python中的.get()方法

3zz*_*zzy 66 python

sentence = "The quick brown fox jumped over the lazy dog."
characters = {}

for character in sentence:
    characters[character] = characters.get(character, 0) + 1 

print(characters)
Run Code Online (Sandbox Code Playgroud)

我不明白characters.get(character, 0) + 1在做什么,休息似乎都很简单.

Ale*_*lli 75

getdict 的方法(例如characters)就像索引dict一样,除了如果键丢失,而不是引发KeyError它返回默认值(如果你.get只用一个参数调用,键,默认值)是None).

所以一个等效的Python函数(调用myget(d, k, v)就像d.get(k, v)可能是:

def myget(d, k, v=None):
  try: return d[k]
  except KeyError: return v
Run Code Online (Sandbox Code Playgroud)

你问题中的示例代码显然是在尝试计算每个字符的出现次数:如果它已经有给定字符的计数,则get返回它(所以它只增加1),否则get返回0(所以增量正确给出1在字符串中第一次出现的字符).


小智 21

为了理解发生了什么,让我们在句子字符串中取一个字母(重复多次)并跟踪它在循环中发生的情况.

请记住,我们从一个空字符字典开始

characters = {}
Run Code Online (Sandbox Code Playgroud)

我会选择字母'e'.让我们第一次通过循环传递字符'e'(在单词The中找到).我将假设它是第一个通过循环的字符,我将用它们的值替换变量:

for 'e' in "The quick brown fox jumped over the lazy dog.":
    {}['e'] = {}.get('e', 0) + 1 
Run Code Online (Sandbox Code Playgroud)

characters.get('e',0)告诉python在字典中查找键'e'.如果没有找到,则返回0.由于这是第一次'e'通过循环,字符'e'尚未在字典中找到,因此get方法返回0.然后将此0值添加到的1(存在于字符[字符] = characters.get(字符,0)+ 1点式).在使用'e'字符完成第一个循环后,我们现在在字典中有一个条目,如下所示:{'e':1}

字典现在是:

characters = {'e': 1}
Run Code Online (Sandbox Code Playgroud)

现在,让我们通过相同的循环传递第二个'e'(在单词jumped中找到).我假设它是第二个通过循环的字符,我将使用它们的新值更新变量:

for 'e' in "The quick brown fox jumped over the lazy dog.":
    {'e': 1}['e'] = {'e': 1}.get('e', 0) + 1
Run Code Online (Sandbox Code Playgroud)

这里的GET方法找到关于"E"的关键条目,并发现其值是1,我们将其添加到其它1中characters.get(字符,0)+ 1,并获得2作为结果.

当我们在字符[character] = characters.get(字符,0)+ 1等式中应用它时:

characters['e'] = 2
Run Code Online (Sandbox Code Playgroud)

应该清楚的是,最后一个等式为已经存在的'e'键分配了新的值2.因此字典现在是:

characters = {'e': 2}
Run Code Online (Sandbox Code Playgroud)


S.L*_*ott 11

从这里开始http://docs.python.org/tutorial/datastructures.html#dictionaries

然后是http://docs.python.org/library/stdtypes.html#mapping-types-dict

然后是http://docs.python.org/library/stdtypes.html#dict.get

characters.get( key, default )

key is a character

default is 0
Run Code Online (Sandbox Code Playgroud)

如果字符在字典中,则characters获得字典对象.

如果没有,你得到0.


句法:

get(key[, default])

如果key在字典中,则返回key的值,否则返回default.如果未给出default,则默认为None,因此此方法永远不会引发a KeyError.


Ned*_*der 6

如果d是字典,那么d.get(k, v)意味着,给我d中的k值,除非k不存在,在这种情况下给我v.这里用它来获取字符的当前计数,该字符应该从0开始如果之前没有遇到过这个角色.