写点什么

Python 代码阅读(第 6 篇):根据给定的函数对列表中的元素进行分组

用户头像
Félix
关注
发布于: 1 小时前
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)}
# EXAMPLESfrom math import floorgroup_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']}
复制代码


group_by接收一个列表和一个函数fn,返回一个分组字典。函数中的字典推导式使用mapfn应用于列表中的元素上以生成返回字典的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}>>>
复制代码


发布于: 1 小时前阅读数: 4
用户头像

Félix

关注

还未添加个人签名 2018.05.04 加入

还未添加个人简介

评论

发布
暂无评论
Python代码阅读(第6篇):根据给定的函数对列表中的元素进行分组