理解Python中的.get()方法

理解Python中的.get()方法,python,Python,我不明白字符是什么。get(character,0)+1在做什么,其余的看起来都很简单。从这里开始 那么这里 那么这里 如果字符在字典中,characters,则获得字典对象 如果不是,则得到0 语法: get(键[,默认值]) 如果键在字典中,则返回键的值,否则为默认值。如果未指定默认值,则默认为None,因此此方法不会引发keyrorm dict的get方法(例如characters)的工作原理与索引dict一样,只是如果缺少键,而不是引发KeyError,它会返回默认值(如果只使用一个参

我不明白字符是什么。get(character,0)+1在做什么,其余的看起来都很简单。

从这里开始

那么这里

那么这里

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

如果不是,则得到0


语法:

get(键[,默认值])

如果键在字典中,则返回键的值,否则为默认值。如果未指定默认值,则默认为
None
,因此此方法不会引发
keyrorm


dict的
get
方法(例如
characters
)的工作原理与索引dict一样,只是如果缺少键,而不是引发
KeyError
,它会返回默认值(如果只使用一个参数调用
.get
,则默认值为
None

因此,一个等价的Python函数(其中调用
myget(d,k,v)
就像
d.get(k,v)
可能是:

characters.get( key, default )

key is a character

default is 0

您问题中的示例代码显然试图计算每个字符的出现次数:如果它已经有给定字符的计数,
get
返回它(因此它只是增加一个),否则
get
返回0(因此,在字符串中字符的第一次出现时,递增正确地给出
1

如果d是字典,则
d.get(k,v)
意思是,在d中给我k的值,除非k不在那里,在这种情况下给我v。这里使用它来获取字符的当前计数,如果以前没有遇到过该字符,它应该从0开始。

要了解发生了什么,让我们看一个字母(重复多次)在句子中字符串,并遵循循环中发生的情况

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

def myget(d, k, v=None):
  try: return d[k]
  except KeyError: return v
我将选择字母“e”。让我们第一次通过循环传递字符“e”(在单词中找到)。我将假设它是第一个通过循环的字符,我将用它们的值替换变量:

characters = {}
characters.get('e',0)告诉python在字典中查找键“e”。如果找不到它,它将返回0。由于这是第一次通过循环传递“e”,字符“e”尚未在字典中找到,因此get方法返回0。然后将该0值添加到1(出现在字符[character]=字符中。获取(字符,0)+1等式)。 在使用“e”字符完成第一个循环之后,我们现在在字典中有这样一个条目:{e':1}

字典现在是:

for 'e' in "The quick brown fox jumped over the lazy dog.":
    {}['e'] = {}.get('e', 0) + 1 
characters['e'] = 2
现在,让我们通过同一个循环传递第二个“e”(在单词jumped中找到)。我假设它是通过循环的第二个字符,我将用它们的新值更新变量:

characters = {'e': 1}
这里,get方法为“e”找到一个键条目,并找到其值1。 我们将其添加到字符中的另一个1。得到(字符,0)+1,结果得到2

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

for 'e' in "The quick brown fox jumped over the lazy dog.":
    {'e': 1}['e'] = {'e': 1}.get('e', 0) + 1
应该清楚的是,最后一个等式为已经存在的“e”键指定了一个新值2。 因此,字典现在是:

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

我知道这是一个相当古老的问题,但这看起来像是在不了解语言特性的情况下编写的一个问题。
collections
库就是为了实现这些目的而存在的

characters = {'e': 2}
在这个例子中,很明显,空间是被计数的,但是是否要过滤这些空间取决于您自己

对于
dict.get(a_key,default_value)
,对于这个特定的问题有几个答案——这个方法返回键的值,或者您提供的默认值。第一个参数是您正在查找的键,第二个参数是该键不存在时的默认值