本文阅读的代码实现了使用给定的分组函数对列表中的元素进行分组的功能。本文阅读的代码片段来自30-seconds-of-python。group_bydefgroup_by(lst,fn):return{key:[elforelinlstiffn(el)==key]forkeyinmap(fn,lst)}#EXAMPLESfrommathimportfloorgroup_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,并返回一个分组字典。函数中的字典理解使用map将fn应用于列表中的元素以生成返回字典的键。同时利用列表推导生成每个key对应的分组列表。字典理解的形式为{key_expr:value_exprforvalueincollectionifcondition}。group_by函数中字典推导的value_expr是一个列表,使用列表推导生成。即,{key_expr:[xforxincollection2ifcondition2]forvalueincollection1ifcondition1}同时我们可以看到,根据group_by代码中的字典推导,可以计算出具有相同key的item,根据Pyrhon中字典的类型,如果键相同,则只保留最新的键值对。实际上,当key相同时,value也相同。[elforelinlstiffn(el)==key]推导的for语句中只有一个变量key。>>>d={'一':1,'二':2,'三':3,'二':2}>>>d{'一':1,'二':2,'三':3}>>d={'一':1,'二':2,'三':3,'二':22}>>>d{'一':1,'二':22,“三”:3}>>>
