在集合上使用聚合函数实现类似 SQL 的 group-by 的算法?
假设您有一个像这样的数组:
[
{'id' : 1, 'closed' : 1 },
{'id' : 2, 'closed' : 1 },
{'id' : 5, 'closed' : 1 },
{'id' : 7, 'closed' : 0 },
{'id' : 8, 'closed' : 0 },
{'id' : 9, 'closed' : 1 }
]
我想总结这个数据集(不使用 SQL!),并获取由以下定义的每个组的 min
和 max
id行'close'
的变体。产生如下输出:
[
{'id__min' : 1, 'id__max' : 5, 'closed' : 1},
{'id__min' : 7, 'id__max' : 8, 'closed' : 0},
{'id__min' : 9, 'id__max' : 9, 'closed' : 1}
]
这只是我想做的事情的一个示例。我想实现类似于 python 的 itertools.groupby
提供的东西,但更全面一些。 (想定义我自己的聚合函数)。
我正在寻找指针、伪代码,甚至任何 PHP、Python 或 Javascript 代码(如果可能的话)。
谢谢!
Let's say you have an array like this:
[
{'id' : 1, 'closed' : 1 },
{'id' : 2, 'closed' : 1 },
{'id' : 5, 'closed' : 1 },
{'id' : 7, 'closed' : 0 },
{'id' : 8, 'closed' : 0 },
{'id' : 9, 'closed' : 1 }
]
I'd like to summarize this dataset (not using SQL!), and grabbing the min
and max
id for each group defined by the variation of the row 'closed'
. Resulting in output like this:
[
{'id__min' : 1, 'id__max' : 5, 'closed' : 1},
{'id__min' : 7, 'id__max' : 8, 'closed' : 0},
{'id__min' : 9, 'id__max' : 9, 'closed' : 1}
]
This is just an example of what I'd like to do. I want to implement something that is similar to what python's itertools.groupby
provides, but being a little more comprehensive. (Would like to define my own aggregation functions).
I am looking for pointers, pseudocode and even any of PHP, Python or Javascript code if possible.
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
itertools.groupby() 的
允许您传递自己的聚合函数。key
参数The
key
argument toitertools.groupby()
allows you to pass your own aggregation function.Ruby 代码:
通用版本:
以下代码将适用于您的示例:
通用算法适用于任何允许将函数作为参数传递给其他函数的语言。如果使用正确的条件和聚合函数,它还可以处理任何数据类型的变量数组。
Ruby code:
The generalised version:
The following code will then work for your example:
The generalised algorithm will work in any language that allows passing functions as arguments to other functions. It will also work with an array of variables of any data type if the correct condition and aggregating functions are used.
Ruby 代码的 PHP 版本,具有更通用的命名和 id 顺序处理:
A PHP version of the Ruby code with slightly more generic naming and id order handling:
也许我误解了这个问题,但这不就是一个标准map/reduce 问题?
Maybe I'm misunderstanding the problem, but isn't this just a standard map/reduce problem?