Clojure中的Python setdefault函数

nen*_*nad 0 clojure

我想在Clojure中做类似的事情:

#增加功能/类别对的计数

  def incf(self,f,cat):    
    self.fc.setdefault(f,{})    
    self.fc[f].setdefault(cat,0)    
    self.fc[f][cat]+=1
Run Code Online (Sandbox Code Playgroud)

有人有想法吗?

Tay*_*ood 8

我认为接近并行是fnil一个函数和一些默认参数值,然后返回一个函数,如果使用nil参数调用将使用默认值:

(defn incf [fc f cat]
  (update-in fc [f cat] (fnil inc 0)))

(incf {} :feature-foo :category-bar)
=> {:feature-foo {:category-bar 1}}
Run Code Online (Sandbox Code Playgroud)

这里我们update-in用来更新输入映射中的嵌套值,并用于fnil设置默认值零,如果它不存在则递增.