用于(嵌套)数据结构部分比较的工具

matchlib的Python项目详细描述


匹配库

PyPI version

这个包提供了一种方便的方法来部分比较python数据结构 (通常是嵌套列表/字典)

安装

pip install matchlib

使用量

frommatchlibimportmatchesuser={'id':42,'name':'John Doe','email':'johndoe@gmail.com','posts':[{'id':1,'text':'some text'},{'id':2,'text':'lorem ipsum','comments':[42,142,242]}]}assertmatches(user,{'id':...,'name':'John Doe','email':'johndoe@gmail.com',...:...})

使用标准的==运算符和matchlib.Partial对象可以实现相同的效果:

frommatchlibimportPartialassertuser==Partial({'id':42,'email':'johndoe@gmail.com',...:...})

可以将...“通配符”放置在任何嵌套级别。 假设我们只需要检查注释142是否出现在特定的post:

assertuser==Partial({'posts':[...,{'id':2,'comments':[...,142,...],...:...}],...:...})

匹配规则很简单:

  • 列表元组...中,匹配零个或多个元素,并保留顺序:
    Partial([1,2,...])==[1,2,3,4]Partial([1,2,...])==[1,2]Partial([1,2,...])!=[0,1,2]Partial([1,2,...])!=[2,1]
  • 对于集合相同,但它们是无序的:
    Partial({1,2,...})=={1,2}Partial({1,2,...})=={0,1,2,3}Partial({1,2,...})!={0,1,3}
  • 因为dict value...匹配任何对象:
    Partial({'a':1,'b':...})=={'a':1,'b':2}
  • dict key...匹配任何键时,如果关联值匹配:
    Partial({'a':1,...:2})=={'a':2,'b':2}
  • 当作为传递时,键和值都匹配零个或多个任意键-值对:
    Partial({'a':1,...:...})=={'a':1,'b':2,'c':3}

更多的黑客

mathchlib提供一个Regex对象,允许匹配任意字符串元素 (除非是dict键)针对正则表达式。 浮点数比较也支持pytest.approx

frompytestimportapproxfrommatchlibimportRegex,Partialaccount={'id':1,'balance':1007.62,'owner':{'email':'user42@domain.com',}}assertaccount==Partial({'id':...,'balance':approx(1000,0.1),'owner':{'email':Regex(r'\w+@domain\.com')}})

如果出于任何原因您不喜欢省略文字(...matchlib.Any对象可以互换使用

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

推荐PyPI第三方库


热门话题
添加组件后,java JTable为空   java将json发送到php并插入mysql,但返回null   java Spring引导JNDI CommonJ资源   从不同PC创建和合并后的Java servlet问题   java如何在使用findelements时从xpath获取文本   java使用spring boot使用gmail smtp发送电子邮件   java在不使用pojo、bean或getter和setter的情况下获取Json标题的Json数组   Java中的OpenFile对话框将null作为响应   JavaBuilder模式。扩展接口   java中无需替换的数据结构选取   java如何评价Encog中的预测神经网络   java如何在安卓中使用实际的HttpURLConnection进行单元测试?   java使用XML配置禁用WebSocket中的CSRF保护   java如何通过hibernate从多表查询中获取数据?   mysql如何在java中获取更新的行Id   java AEM/CQ组件单一组件/有限组件   java FFmpeg Javacv延迟问题   显示整数数组的java不起作用