• 数据开发_Python的分组和Java分组实现


    Python的情况

    Python的分组和Java分组实现
    在实际开发中,涉及到分组和排序,
       可以使用Pandas中的分组,在使用Pandas中的,在使用Panda之前,可以使用Python内建的数据结构实现分组
     Java分组,思路类似,这里展示了两种方法,一种是传统的,一种是Java 1.8+版本的
    

    Python分组

    Python分组,通过字典实现
    01.分组的方式
     from itertools import groupby
      for key, values_iter in groupby(input_list, key=sortkeyfn):
          # 字典中的键映射多个值
          result[key] = list(v[0] for v in values_iter)
      for key, values_iter in groupby(input_list, key=sortkeyfn):
          for v in values_iter:
              len_result[key] = len_result.get(key, 0) + 1
    02.from collections import defaultdict
       d = defaultdict(list)
          for key, value in pairs:
          d[key].append(value)
    03.功能类似以下情况
       def generate_multi_dict(pairs_list) -> dict:
           f_dict_eg = dict()
           for key_cd, value_cd in pairs_list:
               data = f_dict_eg.get(key_cd)
               if data is None:
                   f_dict_eg[key_cd] = []
               f_dict_eg[key_cd].append(value_cd)
           return f_dict_eg 
       def generate_multi_dict_cnt(pairs_list) -> dict:
           f_dict_eg = dict()
           for key_cd, value_cd in pairs_list:
               f_dict_eg[key_cd] = f_dict_eg.get(key_cd, 0) + 1
           return f_dict_eg
    

    Python 排序

    sorted函数
      01.sorted函数用来排序,sorted(iterable[, cmp[, key[, reverse]]])
       其中key的参数为一个函数或者lambda函数。所以itemgetter可以用来当key的参数
       from operator import itemgetter 
       #itemgetter用来去dict中的key,省去了使用lambda函数
      02.	sorted 如果第一个条件 相同 则按第二个条件排序
       使用lambda函数
         sorted(my_dict.items(), key=lambda s: (s[1], -str(s[0]).count("*")), reverse=False)
    

    列表表达式和函数式编程

      ln = [x for x in backup_list if len(x) >= 2 and isinstance(x, str)]
      map  filter
    

    字符串

     变量替换
     正则表达式
    

    Java中的分组

        Java 1.8-
    	     //用map存起来新的分组后数据
    	    Map<Integer,Object> map = new HashMap<Integer,Object>();    
        Java 1.8+ java.util.stream.Stream
    示例代码:
    import java.util.*;
    import java.util.function.Function;
    import java.util.stream.Collectors;
    
    public class JavaGroupExample1 {
        public static void main(String[] args) {
    
            List<String> items = Arrays.asList(
                    "banana",
                    "apple", "apple",
                    "orange", "orange", "orange",
                    "peach", "peach", "peach", "peach"
            );
            // 使用java8特性的写法:  java 1.8+ 分组,计数
            Map<String, Long> result = items.stream()
                    .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
    
            Map<String, Long> finalMap = new LinkedHashMap<>();
            // 排序
            result.entrySet().stream()
                    .sorted(Map.Entry.<String, Long>comparingByValue().reversed())
                    .forEachOrdered(e -> finalMap.put(e.getKey(), e.getValue()));
            System.out.println(result);
            System.out.println(finalMap);
    
            //不使用java8特性的写法: < java 1.8
            Map<String, List<String>> resultMap = new HashMap<>(1024);
            Map<String, Integer> staticMap = new HashMap<>(1024);
            for (String item : items) {
                List<String> tempList = resultMap.get(item);
                //如果取不到数据,那么直接new一个空的ArrayList*
                if (tempList == null ) {
                    tempList = new ArrayList<>();
                    tempList.add(item);
                    resultMap.put(item, tempList);
                } else {
                    //之前已经存放过了,则直接追加数据到原来的List里*
                    tempList.add(item);
                }
            }
    
            for (Map.Entry<String,List<String>> entry:resultMap.entrySet()) {
                staticMap.put(entry.getKey(),entry.getValue().size());
                System.out.println(entry.getKey()+":"+entry.getValue());
            }
            for (Map.Entry entry:staticMap.entrySet()) {
                System.out.println(entry.getKey()+":"+entry.getValue());
            }
    
        }
    }
    
      注意:
    	   不指定类型的时候,编译器默认为object,其方法不显示
    	   解决方式: 添加类型
    

    参考:

     python 排序 sorted 如果第一个条件 相同 则按第二个条件排序 
     在Python中,字典按值排序 https://blog.csdn.net/cxcxrs/article/details/82459800
     字典中的键映射多个值 https://python3-cookbook.readthedocs.io/zh_CN/latest/c01/p06_map_keys_to_multiple_values_in_dict.html
     通过某个关键字排序一个字典列表 https://python3-cookbook.readthedocs.io/zh_CN/latest/c01/p13_sort_list_of_dicts_by_key.html
     Python中用dict统计列表中元素出现的次数  https://www.cnblogs.com/kadycui/p/9226113.html
     Python中的分组函数(groupby、itertools) https://www.cnblogs.com/dreamer-fish/p/5522687.html
      使用java8特性实现分组 https://zhuanlan.zhihu.com/p/101590532
    Java8分组(groupingBy) https://www.cnblogs.com/fengkunangel/p/10434735.html
       java8特性:Collectors.groupingBy进行分组、排序等操作 https://blog.csdn.net/beirdu/article/details/78585945
  • 相关阅读:
    设计模式之——工厂模式
    设计模式之——单例模式
    jQuery 全选 正反选
    将本地jar包添加到maven中
    配置项目启动的时候就加载 servlet
    Cannot call sendError() after the response has been committed(filter问题)
    mybatis pagehelper实现分页
    防止表单重复提交
    java.lang.Exception: No runnable methods 解决方案
    js 倒计时跳转页面
  • 原文地址:https://www.cnblogs.com/ytwang/p/14121510.html
Copyright © 2020-2023  润新知