数据开发_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