2013-01-16 84 views
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(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如果有差別

回答

2

可迭代的需求已經被排序(同一個按鍵上的功能):

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') 
+0

那好吧。非常感謝,我現在無法提出你的答案,因爲我沒有> 15的聲望。文檔頁面上沒有真正的警告。除了考慮其他語言/庫中的大多數其他函數並不需要這些之外,這不是一件好事。 – Bqm

+0

對不起,但斜體傷害。 – georg

+0

@ thg435 - 我會盡量不要過度使用,謝謝編輯。 – root