喜欢排序,但使用外部排序,以便大数据集可以排序。
xsorted的Python项目详细描述
排序
类似于sorted,但使用外部排序以便可以对大型数据集进行排序,例如:
>>> from random import random >>> from six.moves import xrange >>> from xsorted import xsorted >>> nums = (random() for _ in xrange(pow(10, 7))) >>> for x in xsorted(nums): pass
唯一的限制是这些项必须是可pickle的(或者您可以提供自己的序列化程序用于外部化 项目的分区)。
动机
有时需要对数据集进行排序,而不必将整个数据集加载到内存中。例如,如果你 希望将一个非常大的csv文件按其列之一分组。有几种方法可以实现这一点, 常见的解决方案是使用unix命令sort。但是UNIX ^ {TT2}$不能提供Python的灵活性。 CSV模块。xsorted尝试以类似的方式泛化任何python iterable的外部排序,其中 sorted泛化任何iterable的排序。
安装
$ pip install xsorted
使用量
就像sorted…
>>> from xsorted import xsorted >>> ''.join(xsorted('qwertyuiopasdfghjklzxcvbnm')) 'abcdefghijklmnopqrstuvwxyz'
使用reverse…
>>> ''.join(xsorted('qwertyuiopasdfghjklzxcvbnm', reverse=True)) 'zyxwvutsrqponmlkjihgfedcba'
还有一个定制的key…
>>> list(xsorted(('qwerty', 'uiop', 'asdfg', 'hjkl', 'zxcv', 'bnm'), key=lambda x: x[1])) ['uiop', 'hjkl', 'bnm', 'asdfg', 'qwerty', 'zxcv']
可以使用工厂xsorter自定义xsorted的实现细节(以便提供 与^{tt1}相同的接口$分区大小被视为实现细节:
>>> from xsorted import xsorter >>> xsorted_custom = xsorter(partition_size=4) >>> ''.join(xsorted_custom('qwertyuiopasdfghjklzxcvbnm')) 'abcdefghijklmnopqrstuvwxyz'