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

30次阅读

共计 881 个字符,预计需要花费 3 分钟才能阅读完成。

本篇浏览的代码实现了应用给定的分组函数对列表中的元素进行分组的性能。

本篇浏览的代码片段来自于 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']}

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}
>>>

正文完
 0