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)
defaultdicts不同之处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 次 |
| 最近记录: |