编程语言
首页 > 编程语言> > 在Python中等效于Clojure的“关联”和“获取”

在Python中等效于Clojure的“关联”和“获取”

作者:互联网

在Clojure中,您可以使用assoc-in更新地图(字典)并自动创建密钥路径(如果不存在).

(assoc-in {:a 1 :b 3} [:c :d] 33)
{:a 1, :c {:d 33}, :b 3}

与get相同:您可以指定键(或列表索引)的路径,它将返回该路径指定的值,如果不存在则返回nil.

(get-in {:a 1, :c {:d 33}, :b 3} [:c :d])
33
(get-in {:a 1, :c {:d 33}, :b 3} [:c :e])
nil

是否有现成的Python等效或类似的快捷方式? (是的,我知道我可以自己编写躲闪的字典包装程序,但我想避免这样做).

解决方法:

这个怎么样?

>>> from collections import defaultdict
>>> def cdict():
...     return defaultdict(cdict)
... 
>>> d = cdict()
>>> d['a']=1
>>> d['b']=3
>>> d
defaultdict(<function cdict at 0x28d3ed8>, {'a': 1, 'b': 3})
>>> d['c']['d'] = 33
>>> d['c']['d']
33
>>> d
defaultdict(<function cdict at 0x28d3ed8>, {'a': 1, 'c': defaultdict(<function cdict at 0x28d3ed8>, {'e': defaultdict(<function cdict at 0x28d3ed8>, {}), 'd': 33}), 'b': 3})
>>> d['c']['e']
defaultdict(<function cdict at 0x28d3ed8>, {})
>>> 

它在未找到的键上返回一个空的cdict(),而不是nil或None,但是我认为它的行为相同.

该代表可以做一些工作!

标签:clojure,python
来源: https://codeday.me/bug/20191201/2080036.html