這裏有兩種情況。這都需要以下進口:
import itertools
import operator
您將使用itertools.groupby,要麼operator.attrgetter或operator.itemgetter。
對於那些你被obj_1.some_attr == obj_2.some_attr
分組的情況:
get_attr = operator.attrgetter('some_attr')
new_list = [list(g) for k, g in itertools.groupby(sorted(old_list, key=get_attr), get_attr)]
對於a[some_index] == b[some_index]
:您所需要的排序,因爲itertools.groupby
,使新組
get_item = operator.itemgetter(some_index)
new_list = [list(g) for k, g in itertools.groupby(sorted(old_list, key=get_item), get_item)]
注意當鍵的值變化。
注意,你可以用它來創建一個dict
像美國洛特的回答,但沒有使用collections.defaultdict
。
使用字典解析(只對Python 3+,以及可能的Python 2.7,但我不知道):
groupdict = {k: g for k, g in itertools.groupby(sorted_list, keyfunction)}
對於Python的早期版本,或作爲一種更簡潔的選擇:
groupdict = dict(itertools.groupby(sorted_list, keyfunction))
來源
2011-07-06 20:20:05
JAB
_「包含元組(長度相同)而不是對象的列表」_這是否意味着**包含所有長度相同的元組的列表**?如果是,元組被分組的「屬性」是什麼? - 順便說一句,元組是對象,不是嗎? – eyquem
@eyquem:1.是的; 2.元組按一定的索引分組。索引中的項目是一個字符串。我相信,但是我不確定。:-) – Aufwind