简单的django queryset,就像dict queryer
mysdq的Python项目详细描述
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:。