2015-10-23 4 views
3

у меня есть массив, который выглядит следующим образом:Группировка элементов в списке на основе их содержимого

array1 = [[4000,"Mark",5],[4100,"George",3],[4000,"Mark",2],[4200,"Steve",4],[4100,"George",2],[4000,"Mark",1]] 

мне интересно, как я могу переформатировать этот массив, чтобы выглядеть следующим образом:

array2 = [[4000,"Mark",[5,2,1]],[4100,"George",[3,2]],[4200,"Steve",4]] 

ответ

6

Вы можете использовать упорядоченный словарь (collections.OrderedDict), чтобы сохранить первые 2 пункта, как ключ и общие номера в списке в качестве значений:

>>> from collections import OrderedDict 
>>> d=OrderedDict() 
>>> for i,j,k in array1: 
... d.setdefault((i,j),[]).append(k) 
... 
>>> [[i,j,k] for (i,j),k in d.items()] 
[[4000, 'Mark', [5, 2, 1]], [4100, 'George', [3, 2]], [4200, 'Steve', [4]]] 
+2

хороший ответ ... гораздо умнее, чем у меня :) –

+0

Благодарим вас за отличный ответ! Я выберу вас, как только таймер закончится. – Peter

2
[a+[[c[-1] for c in b]] for a,b in itertools.groupby(operator.itemgetter(0,1),sorted(array1))] 

Я думаю ... я сомневаюсь, что это поможет вам узнать что-нибудь ... более подходящее место, чтобы обратиться за помощью, если вы даже не знаете, с чего начать, находится в классе (спросите своего учителя или одноклассников) ...

Смежные вопросы