小编典典

python groupby行为?

python

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

__默认情况下,条件(x > 500)的 范围(1000) 显然是排序的。
我期待的数字0到999在一个被分组 的dict 由条件(X> 500)。但是结果字典只有999个
。其他数字在哪里?任何人都可以解释这里发生了什么吗?


阅读 201

收藏
2020-12-20

共1个答案

小编典典

文档

返回的组本身就是一个与共享底层可迭代对象的迭代器groupby()。因为源是共享的,所以当groupby()对象前进时,先前的组将不再可见。因此,如果以后需要该数据,则应将其存储为列表[。]。

并且您将迭代器存储在其中obj并在以后实现。

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]}
2020-12-20