2016-07-16 2 views
0

Я получил следующий список на Python.Реорганизация таблицы в Python

v5z 3CD 300 
vdz 3CD 100 
vqz 3CD 200 
vtz 3CD 10 
v5z 3C2 22 
vdz 3C2 3232 
vqz 3C2 338 
vtz 3C2 55 
v5z 3Cfix 55 
vdz 3Cfix 100 
vqz 3Cfix 200 
vtz 3Cfix 22 

Хотя мне интересно, как изменить его и получить:

vdz 3CD 100 
vtz 3CD 10 
vqz 3CD 200 
v5z 3CD 300 
vdz 3C2 3232 
vtz 3C2 55 
vqz 3Cfix 200 
v5z 3Cfix 55 
vdz 3Cfix 100 
vtz 3Cfix 22 
vqz 3Cfix 200 
v5z 3Cfix 55 

Я думал о создании словаря, но это не сработало. Какие-нибудь советы?

+0

Вы имели в виду список? –

+0

Если @MohamedYousof правильно, и ваша структура данных является «списком», вы можете решить эту проблему самостоятельно, изучив [документацию по сортировке] (https://docs.python.org/2/library/functions.html# сортируется)! (Вы можете определить произвольную функцию, чтобы определить, как элементы сравниваются/сортируются.) Тем не менее, второй список не является простой перестановкой первого списка; например, есть больше записей '3Cfix' во втором, чем первое. Как бы вы описали отношения между двумя «договоренностями»? –

+0

да, это был список – Monica

ответ

0

Вы можете попробовать что-то вроде этого

from pprint import PrettyPrinter 

pprint = PrettyPrinter(4).pprint 

lst = [ 
    ['v5z', '3CD', 300], 
    ['vdz', '3CD', 100], 
    ['vqz', '3CD', 200], 
    ['vtz', '3CD', 10], 
    ['v5z', '3C2', 22], 
    ['vdz', '3C2', 3232], 
    ['vqz', '3C2', 338], 
    ['vtz', '3C2', 55], 
    ['v5z', '3Cfix', 55], 
    ['vdz', '3Cfix', 100], 
    ['vqz', '3Cfix', 200], 
    ['vtz', '3Cfix', 22], 
] 
sort_index = { 
    "vdz3CD100": 0, 
    "vtz3CD10": 1, 
    "vqz3CD200": 2, 
    "v5z3CD300": 3, 
    "vdz3C23232": 4, 
    "vtz3C255": 5, 
    "vqz3Cfix200": 6, 
    "v5z3Cfix55": 7, 
    "vdz3Cfix100": 8, 
    "vtz3Cfix22": 9, 
    "vqz3Cfix200": 10, 
    "v5z3Cfix55": 11 
} 

slst = sorted(lst, key=lambda e: sort_index.get("{0[0]}{0[1]}{0[2]}".format(e), 100)) 
pprint(slst) 

Попробуйте индекс сортировки по вашему выбору - в вашем случае с последними данными COL.

Я изменил sort_index, но это не очень хорошее решение.

+0

Я написал: sort_index = {'vdz': 0, 'vtz': 1, 'vqz': 2, 'v5z': 3} slst = отсортировано (lst, key = lambda e: sort_index [e [0 ]]) Хотя я до сих пор не знаю, как получить нужный список – Monica

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