随笔 - 836  文章 - 1 评论 - 40 阅读 - 102万
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

 

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   lshan  阅读(622)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
历史上的今天:
2019-11-21 ubuntu 软件管理工具安装
2018-11-21 在Ubuntu下进行MongoDB安装步骤
2018-11-21 在Ubuntu 14.04 64bit上安装百度云Linux客户端BCloud
点击右上角即可分享
微信分享提示