2016-03-15 6 views
0

У меня есть пример многомерный список:Создание многомерного списка из mutidimentioal list в python?

example_list=[ 
     ["a","b","c", 2,4,5,7], 
     ["e","f","g",0,0,1,5], 
     ["e","f","g", 1,4,5,7], 
     ["a","b","c", 3,2,5,7] 
    ] 

Как можно поместить их в группы, как это:

out_list=[ 
     [["a","b","c", 2,4,5,7], 
      ["a","b","c",3,2,5,7] 
     ], 
     [["e","f","g", 0,0,1,5], 
      ["e","f","g", 1,4,5,7] 
     ] 
] 

Я попытался это:

example_list=[["a","b","c", 2,4,5,7],["e","f","g", 0,0,1,5],["e","f","g",1,4,5,7],["a","b","c", 3,2,5,7]] 
unique=[] 
index=0 
for i in range(len(example_list)): 
    newlist=[] 
    if example_list[i][:3]==example_list[index][:3]: 
     newlist.append(example_list[i]) 
    index=index+1 
    unique.append(newlist)    
print unique 

Мои результаты в это:

[['a', 'b', 'c', 2, 4, 5, 7]], [['e', 'f', 'g', 0, 0, 1, 5]], [[e ',' f ',' g ', 1, 4, 5, 7]], [[a', 'b ',' c ', 3, 2, 5,7]]]

Я не мог понять это. Пожалуйста, помогите. Спасибо, Shiuli

+0

является группировка в зависимости от трех первых элементов? – YOBA

ответ

0

Если группировка решает первых трех элементов в каждом списке ниже код будет делать то, что вы просите:

from collections import defaultdict 

example_list=[["a","b","c", 2,4,5,7],["e","f","g",0,0,1,5],["e","f","g", 1,4,5,7],["a","b","c", 3,2,5,7]] 
d = defaultdict(list) 
for l in example_list: 
    d[tuple(l[:3])].append(l) 

print d.values() # [[['a', 'b', 'c', 2, 4, 5, 7], ['a', 'b', 'c', 3, 2, 5, 7]], ...] 

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

0

Сначала сортируйте список, просто используя sorted(), предоставляя функцию lambda как ключ.

>>> a = sorted(example_list, key=lambda x:x[:3]) 
[['a', 'b', 'c', 2, 4, 5, 7], ['a', 'b', 'c', 3, 2, 5, 7], ['e', 'f', 'g', 0, 0, 1, 5], ['e', 'f', 'g', 1, 4, 5, 7]] 

И затем использовать itertools.groupby() на отсортированном списке:

>>> [list(v) for k, v in groupby(a, lambda x:x[:3])] 
[ 
    [['a', 'b', 'c', 2, 4, 5, 7], ['a', 'b', 'c', 3, 2, 5, 7]], 
    [['e', 'f', 'g', 0, 0, 1, 5], ['e', 'f', 'g', 1, 4, 5, 7]] 
]