python groupby
2017-11-29 00:00
253 查看
from itertools import groupby d1 = {'name': 'zhangsan', 'age': 20, 'country': 'China'} d2 = {'name': 'wangwu', 'age': 19, 'country': 'USA'} d3 = {'name': 'lisi', 'age': 22, 'country': 'JP'} d4 = {'name': 'zhaoliu', 'age': 22, 'country': 'USA'} d5 = {'name': 'pengqi', 'age': 22, 'country': 'USA'} d6 = {'name': 'lijiu', 'age': 22, 'country': 'China'} lst = [d1, d2, d3, d4, d5, d6] # 使用前必须安照关键字排序 lst.sort(key=lambda x: x['country']) # 安装country分组,返回一个迭代器,只能使用一次 g = groupby(lst, key=lambda x: x['country'] ) print(type(g)) # 遍历 # for key, list in g: # print(key) # for i in list: # print(i) # 将键值转化为列表 # print([key for key, group in g]) # ['China', 'JP', 'USA'] ''' China {'name': 'zhangsan', 'age': 20, 'country': 'China'} {'name': 'lijiu', 'age': 22, 'country': 'China'} JP {'name': 'lisi', 'age': 22, 'country': 'JP'} USA {'name': 'wangwu', 'age': 19, 'country': 'USA'} {'name': 'zhaoliu', 'age': 22, 'country': 'USA'} {'name': 'pengqi', 'age': 22, 'country': 'USA'} ''' # 生成字典,按照键和对应的列表 # 将迭代器转化为列表 # d = { # key: list(val) for key, val in g # } # # for k, v in d.items(): # print(k) # for i in v: # print(i) ''' China {'name': 'zhangsan', 'age': 20, 'country': 'China'} {'name': 'lijiu', 'age': 22, 'country': 'China'} JP {'name': 'lisi', 'age': 22, 'country': 'JP'} USA {'name': 'wangwu', 'age': 19, 'country': 'USA'} {'name': 'zhaoliu', 'age': 22, 'country': 'USA'} {'name': 'pengqi', 'age': 22, 'country': 'USA'} ''' # 各组的数目 # d = { # key: len(list(val)) for key, val in g # } # {'China': 2, 'JP': 1, 'USA': 3} # print(d) # 过滤分组,由于val是一个迭代器,只能使用一次 # {'China': [], 'USA': []} # print({ # key: list(val) for key, val in g if len(list(val)) >= 2 # }) # d = [ # (key, list(val)) for key, val in g # ] # print(d) # nd = dict(filter(lambda x: len(x[1]) >= 2, d)) # print(nd) # 或者: # d = { # key: list(val) for key, val in g # } # print(d) # nd = dict(filter(lambda item: len(item[1]) > 2, d.items())) # print(nd) # {'USA': [{'name': 'wangwu', 'age': 19, 'country': 'USA'}, {'name': 'zhaoliu', 'age': 22, 'country': 'USA'}, {'name': 'pengqi', 'age': 22, 'country': 'USA'}]} # 返回包含有2个以上元素的分组 # print([ # key for key, val in g if len(list(val)) >= 2 # ]) # 返回:['China', 'USA'] # 自定义分组 lst = [2, 8, 11, 25, 43, 6, 9, 29, 51, 66] def gb(num): if num <= 10: return 'less' elif num >= 30: return 'great' else: return 'middle' print([(k, list(g)) for k, g in groupby(sorted(lst), key=gb)]) # [('less', [2, 6, 8, 9]), ('middle', [11, 25, 29]), ('great', [43, 51, 66])] d = { k: list(g) for k, g in groupby(sorted(lst), key=gb) } print(d) # {'less': [2, 6, 8, 9], 'middle': [11, 25, 29], 'great': [43, 51, 66]}
相关文章推荐
- python itertools.groupby
- python dataframe groupby
- python groupby用法实战
- Python DataFrame.groupby()聚合函数,分组级运算
- UserWarning: .python-eggs is writable by group/others and vulnerable to attack when used with get_r
- .python-eggs is writable by group/others and vulnerable to attack when used with get_resource_filena
- [Spark][Python]groupByKey例子
- Python分组groupby
- python itertool.groupby使用误点!
- Python的groupby
- python groupby
- Python 告警 UserWarning: .python-egg is writable by group/others 解决方案
- 【python】DataFrame.groupby()聚合,分组级运算
- SQL Group By
- [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated c
- LINQ体验(7)——LINQ to SQL语句之Group By/Having和Exists/In/Any/All/Contains
- imap send email by python
- MySQL 5.7默认ONLY_FULL_GROUP_BY语义介绍
- SQL语句之Group By&Having&where
- sql groupby 造成一个表中重复记录 少一条