python groupby行为? [英] python groupby behaviour?

查看:167
本文介绍了python groupby行为?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


>>from itertools import groupby
>>keyfunc = lambda x : x > 500
>>obj = dict(groupby(range(1000), keyfunc))
>>list(obj[True])
[999]
>>list(obj[False])
[]




对于条件(x> 500),默认情况下明显排序

range(1000)

我期待0到999之间的数字被条件(x> 500)分组在 。但是由此产生的字典只有999.

其他数字在哪里?
任何人都可以解释这里发生了什么?

range(1000) is obviously sorted by default for the condition (x > 500).
I was expecting the numbers from 0 to 999 to be grouped in a dict by the condition (x > 500). But the resulting dictionary had only 999.
where are the other numbers?. Can any one explain what is happening here?

推荐答案

从文档中可以看出:返回的组本身是一个迭代器与groupby()共享底层的迭代,因为源是共享的,当groupby()对象被提前时,上一个组不再可见,所以如果稍后需要这个数据,它应该被存储为一个列表 。而您正在将迭代器存储在 obj 中,稍后实现。

From the docs: "The returned group is itself an iterator that shares the underlying iterable with groupby(). Because the source is shared, when the groupby() object is advanced, the previous group is no longer visible. So, if that data is needed later, it should be stored as a list". And you are storing iterators in obj and materializing them later.

In [21]: dict((k, list(g)) for k, g in groupby(range(10), lambda x : x > 5))
Out[21]: {False: [0, 1, 2, 3, 4, 5], True: [6, 7, 8, 9]}

这篇关于python groupby行为?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆