我在查看Python的toolz库中的groupby
函数的代码时发现了这个:
def groupby(key, seq):
""" Group a collection by a key function
"""
if not callable(key):
key = getter(key)
d = collections.defaultdict(lambda: [].append)
for item in seq:
d[key(item)](item)
rv = {}
for k, v in d.items():
rv[k] = v.__self__
return rv
使用 rv[k] = v.__self__
而不是 rv[k] = v
有什么原因吗?
d
是一个键到 lambda 表达式创建的列表的append
方法的映射,所以rv[k] = v.__self__
构建了一个键到实际列表的映射。这种有些令人困惑的实现方式之所以被使用是为了提高速度,相关背景信息可以在这里找到(简而言之:速度)。 - jonrsharpe