1.list数据分割为多个小列表 (java lists.partition)
2. 分组
import itertools
def partition(mylist, size):
"""
:param mylist: 需要分割的列表
:param size: 每几个分割一起
:return: [[],[]]
"""
return [mylist[i:i + size] for i in range(0, len(mylist), size)]
#
def groupby(mylist,key):
"""
:param mylist: eg: [{"user":"sea","age":"23"},{"user":"sea1","age":"22"}]
:param key: eg: lambda x:x["user"] or lambda d:d.x
:return:
"""
result = {}
# lstg = groupby(mylist,key=lambda x:x['no'])
lstg = itertools.groupby(mylist, key= key)
for (key, group) in lstg:
result[key] = list(group)
return result
if __name__ == '__main__':
# 分割
l = [i for i in range(15)]
partition1 = partition(l, 3)
print(partition1)
去重: 思路其实就是先把ids变为[[], 1,2,3,......] ,然后在利用reduce的特性
def distinc(my_list):
return reduce(lambda x, y: x if y in x else x + [y], [[]] + my_list)
过滤:
my_list = []
my_list.append({"sea1": 1,"age":2})
my_list.append({"sea1": 2,"age":2})
my_list.append({"sea1": 3,"age":2})
a = itertools.filterfalse(lambda x: x["sea1"]==2, my_list)
print(list(a))
result: [{'sea1': 1, 'age': 2}, {'sea1': 3, 'age': 2}]
分组统计数量:
def group_count(mylist,key):
'''
:param mylist: [{"user":"sea","age":"23"},{"user":"sea1","age":"22"}]
:param key:
:return:
'''
result = {}
for d in datas:
v = d[key]
result[v] = (result.get(v)+1) if (v in result) else 1
return result;