Python代码阅读(第6篇)(根据给定的函数对列表中的元素进行分组)
本篇阅读的代码实现了使用给定的分组函数对列表中的元素进行分组的功能。
本篇阅读的代码片段来自于30-seconds-of-python。
group_by
def group_by(lst, fn):
return {key : [el for el in lst if fn(el) == key] for key in map(fn, lst)}# EXAMPLES
from math import floor
group_by([6.1, 4.2, 6.3], floor) # {4: [4.2], 6: [6.1, 6.3]}
group_by(['one', 'two', 'three'], len) # {3: ['one', 'two'], 5: ['three']}
【Python代码阅读(第6篇)(根据给定的函数对列表中的元素进行分组)】
group_by
接收一个列表和一个函数fn
,返回一个分组字典。函数中的字典推导式使用map
将fn
应用于列表中的元素上以生成返回字典的key
。同时使用列表推导式生成生成每个key
对应的分组列表。字典推导式有
{ key_expr: value_expr for value in collection if condition }
这样的形式。group_by
函数中字典推导式的value_expr
是一个列表,该列表使用了列表推导式来生成。即{ key_expr: [x for x in collection2 if condition2] for value in collection1 if condition1 }
同时,我们可以看到根据
group_by
代码中的字典推导式,可能计算出key
相同的项,根据Pyrhon中字典的类型的规则,key
相同的,只保留最新的key-value
对。实际上当key
相同时,value
值也一样。[el for el in lst if fn(el) == key]
推导式的for
语句中只有key
一个变量。>>> d = {'one': 1, 'two': 2, 'three': 3, 'two': 2}
>>> d
{'one': 1, 'two': 2, 'three': 3}
>>> d = {'one': 1, 'two': 2, 'three': 3, 'two': 22}
>>> d
{'one': 1, 'two': 22, 'three': 3}
>>>
推荐阅读
- CVE-2020-16898|CVE-2020-16898 TCP/IP远程代码执行漏洞
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分
- Ⅴ爱阅读,亲子互动——打卡第178天
- 上班后阅读开始变成一件奢侈的事
- python学习之|python学习之 实现QQ自动发送消息
- 逻辑回归的理解与python示例
- 历史教学书籍
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- 绘本讲师训练营【24期】14/21阅读原创《小黑鱼》