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,因此此方法永远不会引发aKeyError.
| 归档时间: |
|
| 查看次数: |
112255 次 |
| 最近记录: |