Dots:Dotaccessible,更新软件Python dicts(列表)。
dotsi的Python项目详细描述
多西
Dot可访问、支持更新的Python dicts(和列表)。递归地工作,就像一个符咒。在
Dotsi定义了两个类,dotsi.Dict
和{
安装
pip install dotsi
或者,将dotsi.py
下载到您的项目目录中。在
使用
让我们直接进入:
^{pr2}$在上面的例子中,虽然我们显式地将d
初始化为dotsi.Dict
:
d.users
自动成为dotsi.List
。在d.users[0]
自动成为dotsi.Dict
。在
Dotsi与其他
瘾君子:在Polydojo,我们使用Addict已经有一段时间了。这是一个很棒的图书馆!但它不能很好地处理列表嵌套(内部)dict。在
>>>importaddict>>>>>>d=addict.Dict({"foo":{"bar":"baz"}})>>>d.foo{'bar':'baz'}>>>d.users=[{"id":0,"name":"Alice"}]>>>d.users[0].nameTraceback(mostrecentcalllast):File"<stdin>",line1,in<module>AttributeError:'dict'objecthasnoattribute'name'>>>
轻松娱乐:
EasyDict是另一个很棒的库。它递归地工作,但不完全支持列表嵌套dict更新。在
>>>importeasydict>>>>>>d=easydict.EasyDict({"foo":{"bar":"baz"}})>>>d.foo{'bar':'baz'}>>>d.users=[{"id":0,"name":"Alice"}]>>>d.users[0].name'Alice'>>>d.users.append({"id":1,"name":"Becca"});>>>d.users[1].nameTraceback(mostrecentcalllast):File"<stdin>",line1,in<module>AttributeError:'dict'objecthasnoattribute'name'>>>
捷径
课程:
dotsi.Dict
是dotsi.DotsiDict
的短别名。在dotsi.List
是dotsi.DotsiList
的短别名。在
功能:
dotsi.dotsify()
调用dotsi.Dict
/dotsi.List
,视情况而定。在dotsi.fy()
是dotsi.dotsify()
的短别名。在dotsi.mapdotsify()
类似于内置的map()
,但返回一个dotsi.List
。在dotsi.mapfy
是dotsi.mapdotsify()
的短别名。(更多信息请参见下文。)
在大多数情况下,您只需要:
dotsi.fy(thing)
,其中{}是 dict
或{}。在
Dict类对象
当dotsi.fy()
将dict
类型的对象转换为dotsi.Dict
时,它不会与其他dict类似的对象相接触,例如collections.OrderedDict
或{
要将非dict
,但类似dict的对象转换为dotsi.Dict
,请直接使用dotsi.Dict(.)
,或使用dotsi.fy(dict(.))
。在
>>>importdotsi>>>fromcollectionsimportOrderedDict>>>>>>d=OrderedDict({"foo":{"bar":"baz"}})>>>dOrderedDict([('foo',{'bar':'baz'})])>>>type(d)<class'collections.OrderedDict'>>>>>>>x=dotsi.fy(d)>>>xOrderedDict([('foo',{'bar':'baz'})])>>>type(x)<class'collections.OrderedDict'>>>>>>>y=dotsi.Dict(d)>>>y{'foo':{'bar':'baz'}}>>>type(y)<class'dotsi.DotsiDict'>>>>>>>z=dotsi.fy(dict(d))>>>z{'foo':{'bar':'baz'}}>>>type(z)<class'dotsi.DotsiDict'>
dict
的子类,例如http.cookie.SimpleCookie
,通常实现自定义行为,在转换为dotsi.Dict
时,这些行为将丢失。因此,不应该实现自动转换。在
快速插头
Dotsi是由Polydojo, Inc.的人构建和维护的,由sumukhbarve领导。如果您的团队正在寻找一个简单的项目管理工具,请查看我们的最新产品:BoardBell.com。在
列表式对象
与dicts类似,dotsi.fy(.)
只将list
类型的对象转换为dotsi.List
,但不接触其他类似列表的对象或元组。要将非list
,但类似列表的对象转换为dotsi.List
,请直接调用dotsi.List(.)
或使用dotsi.fy(list(.))
标识函数
对于非dict
和非list
对象,dotsi.fy(.)
相当于恒等函数。在
请注意,从Python3+中,内置的map()
生成了一个非list
iterable。因此,调用dotsi.fy(map(.))
就相当于map(.)
。相反,请使用dotsi.List(map(.))
。在
映射助手
由于映射是一个非常常见的用例,我们已经包含了dotsi.mapfy(.)
,它本质上等同于dotsi.List(map(.))
。但是另外,对于dotsi.mapfy(.)
,为了映射到single序列,可以按任意顺序传递参数。在
也就是说,以下几行是等效的:
x = dotsi.mapfy(lambda n: {"n": n}, [0, 1, 2])
x = dotsi.mapfy([0, 1, 2], lambda n: {"n": n})
在任何一种情况下,x[0].n == 0
将是True
。在
当映射到multiple序列时,dotsi.mapfy(.)
需要与map(.)
相同的参数顺序。在
重写的方法
除了.__init__(.)
等魔术方法,下面列出了Dotsi重写的方法。在
dotsi.Dict
重写:
.update(.)
.setdefault(.)
.copy(.)
dotsi.List
重写:
insert(.)
append(.)
extend(.)
copy(.)
所有重写方法的签名应与它们的非重写对应方法等效(如果不完全相同)。在
许可
版权所有(c)2020 Polydojo,Inc
软件许可证ng:
本软件以MIT许可证“按原样”发布,无任何明示或暗示的担保。请参阅LICENSE.txt了解更多详细信息。在
无商标权:
上述软件许可条款并不授予Polydojo,Inc.的商标、服务标志、品牌名称或徽标的任何权利
- 项目
标签: