1.list数据分割为多个小列表  (java   lists.partition)

2. 分组      

 

def groupby(mylist,key):
    """
    :param mylist: eg: [{"user":"sea","age":"23"},{"user":"sea1","age":"22"}]
    :param key:  eg:"user"
    :return:
    """
    result = {}
    for data in mylist:
        k = data[key]
        value_list = result.get(k, None)
        if not value_list:
            result[k] = [data]
        else:
            value_list.append(data)
    return result

 

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)

list 对象去重 

def distinct_by(lst, key):
    seen_values = set()
    unique_items = []
    for item in lst:
        if item[key] not in seen_values:
            unique_items.append(item)
            seen_values.add(item[key])
    seen_values = None
    return unique_items

 

 

过滤:

    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;

 

posted on 2022-11-21 11:34  lshan  阅读(575)  评论(0编辑  收藏  举报