简单的django queryset,就像dict queryer

mysdq的Python项目详细描述


https://travis-ci.org/josuebrunel/mysdq.svg?branch=masterhttps://coveralls.io/repos/github/josuebrunel/MySDQ/badge.svg?branch=masterhttp://pepy.tech/badge/mysdq

mysdq是一个简单的dictionary queryer查询程序,其api接近django queryset

它旨在快速地处理一些json/dict数据。

它支持operator模块中的所有运算符(是的,甚至是那些不起作用的运算符)。

使用时请考虑django queryset

安装

pipinstallmysdq

快速启动

这里使用的数据可以在here中找到

In[1]:importjsonIn[2]:data=json.load(open('tests/users.json'))In[3]:frommysdqimportDictQuererIn[4]:qs=DictQuerer(data)In[5]:qs.count()==7Out[5]:TrueIn[8]:qs.get(nickname='yloking')Out[8]:{'address':{'city':'Paris','name':'rue du chatea','num':169,'zipcode':'75014'},'age':25,'firstname':'yosuke','lastname':'loking','nickname':'yloking','profiles':[{'name':'twitter','url':'https://twitter.com/yloking/','username':'yloking'},{'name':'github','url':'https://github.com/yloking/','username':'yloking'},{'name':'reddit','url':'https://reddit.com/yloking/','username':'yloking'}]}# Querying non matching entry returns NoneIn[9]:qs.get(lastname='young',age__le=20)# Querying an entry and requesting only 2 attributesIn[11]:qs.filter(lastname='young',age__gt=20).values('nickname','age')Out[11]:[{'age':35,'nickname':'kyoung'}]# Querying a sub keyIn[12]:qs.filter(address__zipcode='44000').values('nickname','age','address')Out[12]:[{'address':{'city':'Nantes','name':'cheval blanc','num':12,'zipcode':'44000'},'age':35,'nickname':'kyoung'}]# Querying a item in a listIn[13]:qs.filter(profiles__0__url__contains='kwame')Out[13]:[{'age':24,'nickname':'kkwame','profiles':[{'name':'twitter','url':'https://twitter.com/kkwame/','username':'kkwame'},{'name':'github','url':'https://github.com/kkwame/','username':'kkwame'},{'name':'reddit','url':'https://reddit.com/kkwame/','username':'kkwame'}]}]# Ordering by attributeIn[14]:qs.order_by('age').values('nickname','age')Out[14]:[{'age':15,'nickname':'tblack'},{'age':24,'nickname':'kkwame'},{'age':25,'nickname':'yloking'},{'age':25,'nickname':'jrodriguez'},{'age':28,'nickname':'jkouka'},{'age':32,'nickname':'dmccrey'},{'age':35,'nickname':'kyoung'}]# Grouping by attributeIn[16]:res=qs.group_by('age')In[17]:assertlen(res[25])==2In[18]:len(res[25])Out[18]:2# Apply a function to an attributeIn[19]:qs.apply(lambdax:x*2,'age').values('nickname','age')Out[19]:[{'age':30,'nickname':'tblack'},{'age':48,'nickname':'kkwame'},{'age':50,'nickname':'yloking'},{'age':50,'nickname':'jrodriguez'},{'age':56,'nickname':'jkouka'},{'age':64,'nickname':'dmccrey'},{'age':70,'nickname':'kyoung'}]

差不多了。有关更多筛选器属性,请检查代码:wink:。

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

推荐PyPI第三方库


热门话题
如何用java表示这个数学函数的算法   Java/Stream帮助:仅使用streams将嵌套的映射列表转换为映射   使用Selenium连接到数据库时发生java未知主机异常   java如何了解jvm内存使用:“堆内存”和“堆外内存”   java Oracle BI报告导入模板   java如何使用Spring将xml转换为bean?   java线程。join()以保证执行顺序   java从THINGSPEAK到ANDROID应用程序获取JSON数据   使用Java的stanford库中的异常   java正确使用来自其他类文件的方法   如果集合中的元素类型为接口类型,如何填充集合?(爪哇)   记录java。util。记录器创建的文件超过了应有的数量   类Java对象uniq值   尝试调用无法应用于()的方法时出现java错误