2013-09-26 5 views
0

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

new_list = [['1', '100', 'A', 'B,A'], ['2', '200', 'A', 'T'], 
['3', '200', 'H', 'A,C'], ['4', '300', 'W', 'T'], 
['5', '400', 'I', 'BABA,ABB'], ['6', '500', 'Q', 'LP,AL']] 

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

new_list = [['1', '100', 'A', 'A,B'], ['2', '200', 'A', 'T'], 
['3', '200', 'H', 'A,C'], ['4', '300', 'W', 'T'], 
['5', '400', 'I', 'ABB,BABA'], ['6', '500', 'Q', 'AL,LP']] 

Однако я не знаю, как отсортировать только указанный индекс в этом списке. Должен ли я разделить последний столбец на ,?

Образец данных:

# Data 
# I 
# don't 
# need 
1 100 982 A B,A 41 
2 200 982 A T 42 
3 200 982 H C 43 
4 300 982 W T 43 
5 400 982 I BABA,ABB 44 
6 500 982 Q LP,AL 44 

Загрузка данных:

filename = 'test.txt' 

new_list = [] 

readFile = open(filename, 'r') 
lines = readFile.readlines() 
for line in lines: 
    if not line[0].startswith('#'): 
     linewords = line.split() 
     new_list.append([linewords[0], 
         linewords[1], 
         linewords[3], 
         linewords[4]]) 

ответ

2

разделить его на "", затем сортируют, а затем присоединиться к списку:

new_list.append([linewords[0], 
         linewords[1], 
         linewords[3], 
         ",".join(sorted(linewords[4].split(",")))]) 
0

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

import re 
p = re.compile(' +') 

for line in lines: 
    if line.startswith('#'): 
     continue 
    linewords = p.split(line) 
    lastword = linewords[4].split(',') 
    lastword.sort() 
    new_list.append([linewords[0],linewords[1],linewords[3],','.join(lastword)]) 
0

попробовать:

def sort_last(inner_list): 
    last = inner_list[-1].split(',') 
    last.sort() 
    last = ','.join(last) 
    return inner_list[:-1] + [last] 

new_list = [sort_last(l) for l in new_list] 
0
[x[:-1]+[','.join(sorted(x[-1].split(',')))] for x in new_list] 
0

Попробуйте

list2 = [] 

for level1 in new_list: 
    _temp = [] 
    for level2 in level1: 
     if "," in level2: 
      _temp.append(sorted(level2.split(","))) 
     else: 
      _temp.append(level2) 
    list2.append(_temp) 

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