cha*_*yWu 32 python defaultdict
我是python的新手,我从某个地方读了一些代码片段.这是计数排序的一种实现.
代码如下:
from collections import defaultdict
def sort_colors(A):
ht = {} # a hash map
ht = defaultdict(lambda:0, ht) # with default value 1
for i in A:
ht[i] += 1
ret = []
for k in [0, 1, 2]:
ret.extend([k]*ht[k])
return ret
Run Code Online (Sandbox Code Playgroud)
就像在func的前两行中一样
ht = {}
ht = defaultdict(lambda:0, ht)
Run Code Online (Sandbox Code Playgroud)
关于这个初始化我不是很清楚.你能不能帮我解决一下?还有,我们只需用以下内容替换这两行吗?
ht = defaultdict(int) # default value 0
Run Code Online (Sandbox Code Playgroud)
raf*_*elc 39
简短回答(根据Montaro的答案如下)
defaultdict(lambda:1)
Run Code Online (Sandbox Code Playgroud)
关于如何defaultdict
工作的长篇答案
ht = {}
ht = defaultdict(lambda:0, ht)
Run Code Online (Sandbox Code Playgroud)
defaultdict
s不同之处dict
在于,当您尝试使用dict
不存在的键访问常规时,它会引发一个KeyError
.
defaultdict
但是,不会引发错误:它会为您创建密钥.有哪些价值?随着callabe
你的回归作为一个参数传递.在这种情况下,每个新键都将使用值0
(这是简单lambda
函数的返回lambda:0
)创建,这也恰好是相同的返回值int()
,因此在这种情况下,将默认函数更改为没有区别int()
.
更详细地分解这一行: ht = defaultdict(lambda:0, ht)
第一个参数是一个函数,它是一个可调用的对象.这是将被调用以为不存在的键创建新值的函数.第二个参数ht
是可选的,指的是defaultdict
将构建new的基本字典.因此,如果ht
有一些键和值,defaultdict
那么这些键也会具有相应的值.如果您尝试访问这些密钥,则会获得旧值.但是,如果您没有传递基本字典,defaultdict
则会创建一个全新的字符串,因此,所有访问的新密钥都将获得从callable返回的默认值.
(在这种情况下,ht
最初是空的dict
,完全没有区别ht = defaultdict(lambda:0)
,ht = defaultdict(int)
或者ht = defaultdict(lambda:0, ht)
:它们都会构建相同的defaultdict
.
Mon*_*aro 34
我想你可以传递一个返回的lambda函数 1
d = defaultdict(lambda:1)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
26932 次 |
最近记录: |