Dots:Dotaccessible,更新软件Python dicts(列表)。

dotsi的Python项目详细描述


多西

Dot可访问、支持更新的Python dicts(和列表)。递归地工作,就像一个符咒。在

Dotsi定义了两个类,dotsi.Dict和{},这两个类一起工作,将类似JavaScript的点表示法引入Python 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.Dictdotsi.DotsiDict的短别名。在
  • dotsi.Listdotsi.DotsiList的短别名。在

功能:

  • dotsi.dotsify()调用dotsi.Dict/dotsi.List,视情况而定。在
  • dotsi.fy()dotsi.dotsify()的短别名。在
  • dotsi.mapdotsify()类似于内置的map(),但返回一个dotsi.List。在
  • dotsi.mapfydotsi.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()生成了一个非listiterable。因此,调用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.的商标、服务标志、品牌名称或徽标的任何权利

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何拆分字符串(基于各种分隔符),但不保留空格?   解析。Json格式的txt文件和knime中的java   java Spring rest api为什么在rest api调用的响应中更改了数据类型   升华文本3抛出java。lang.ClassNotFoundException,而记事本++不存在   java Android指纹扫描仪在尝试5次后停止工作?   java Android如何设置精确的重复报警?   java如何使用HTTPGET connect为access API输入用户名和密码   java当测试报告显示没有测试失败时,Gradle为什么说“有失败的测试”?   用Gson实现java获取响应   MapReduce程序中函数错误的java不可映射参数   java spring安全性不符合自动代理的条件   java GWT使用异步回调进行同步/阻塞调用   java奇怪的类数组问题无法在jsp中显示   如何在java中使用PrinterJob使用epl打印条形码   java如何在JTable中居中单元格   将Java Mockito测试转换为Kotlin   html Java正则表达式模式匹配到多个相同标记   testCompile中缺少java Gradle(Android)多项目依赖项   在输入提示后输入字符串时发生java FileNotFoundException