groupby的相同密钥多次

时间:2013-01-16 09:17:39

标签: python iterator group-by

我不认为我发现了一个错误,但它对我来说并不正常。

from itertools import groupby
from operator import itemgetter
c=[((u'http://www.example.com', u'second_value'), u'one'), 
   ((u'http://www.example.com', u'second_value'), u'two'), 
   ((u'http://www.hello.com', u'second_value'), u'one'), 
   ((u'http://www.example.com', u'second_value'), u'three'), 
   ((u'http://www.hello.com', u'second_value'), u'two')]
b= groupby(c, key=itemgetter(0))
for unique_keys, group in b:
    print unique_keys

收率:

(u'http://www.example.com', u'second_value')
(u'http://www.hello.com', u'second_value')
(u'http://www.example.com', u'second_value')
(u'http://www.hello.com', u'second_value')

有任何解释吗? (我只期待两个不同的键)。我正在使用python 2.7.1,如果这有所作为

1 个答案:

答案 0 :(得分:3)

可迭代需要已经排序(在相同的键函数上):

from itertools import groupby
from operator import itemgetter
c=[((u'http://www.example.com', u'second_value'), u'one'), 
   ((u'http://www.example.com', u'second_value'), u'two'), 
   ((u'http://www.hello.com', u'second_value'), u'one'), 
   ((u'http://www.example.com', u'second_value'), u'three'), 
   ((u'http://www.hello.com', u'second_value'), u'two')]
b= groupby(sorted(c,key=itemgetter(0)), key=itemgetter(0))
for unique_keys, group in b:
    print unique_keys

出:

(u'http://www.example.com', u'second_value')
(u'http://www.hello.com', u'second_value')