数据结构的上下文
vcontext的Python项目详细描述
vcontext包提供单个对象Context。上下文是 具有自定义项访问权限的字典式数据结构。你可以 通过点访问访问您的数据。上下文本身不包装数据, 更确切地说,只是访问它们。上下文具有数据所在的data属性 存储。
安装
vContext在pypi上,所以您 可以简单地:
pip install vcontext
__getitem__vs__getattribute__
对于Context,我决定使用__getitem__方法,因为 希望对列表/元组也有一致的点访问。这会是 无法使用__getattr__。
项目
项是点分隔的值路径。此项被拆分,值为 具有以下规则*字符串-访问字典项或对象 属性*整数-访问列表项*第一部分必须为字符串 (因为上下文是字典)
示例:
context=Context({'status':200,'message':'OK','result':[{'user':{'username':'phonkee','name':'Peter Vrba'}}]})assertcontext['result.0.user.username']=='phonkee'assertcontext['status']==200
如果找不到数据,则对 找不到。context提供了get方法,您可以在其中指定 如果找不到值,则为默认值,这将永远不会引发异常。
生成项:
如果上下文只支持get of values,那么它将是无用的。上下文有 还支持根据给定的 item。让我们从前面的示例构建一个结构:
context=Context()context['status']=200context['message']='OK'context['result.0.user.username']='phonkee'context['result.0.user.name']='Peter Vrba'assertcontext.data=={'status':200,'message':'OK','result':[{'user':{'username':'phonkee','name':'Peter Vrba'}}]}
现在我们尝试删除项目
delcontext['result.0']assertlen(context['result'])==0
那个可爱的小帮手不是吗?
。键(项=无):
上下文还支持keys方法。通过调用此方法上下文 递归遍历对象。它支持dict/list,支持自定义 对象它只返回对象键。
context=Context()context['hello.world']='yay'assertcontext.keys()==['hello.world']
原料药:
上下文提供以下方法:
- .copy()-deepcopies数据并返回新上下文
- .dumps(item=None)-转储到json,属性:
- item-要转储到json的项
- .items(**kwargs)-键值项(元组键,值)的列表, **kwargs传递给keys方法
- .iteritems(**kwargs)-项的生成器版本,**kwargs 传递给keys方法
- keys(item=None)-返回所有键的列表,属性:
- item-要转储到json的项
贡献:
贡献是受欢迎的,还有很多部分要做 增强。
待办事项:
添加对特殊列表键append的支持,以便我们可以追加到列表。 例如:
context['result.usernames.__append__']='phonkee'