2016-01-05 3 views
1

У меня есть список списков, как следующее:Сортировка списка списков на основе данной строки в Python

list_of_lists = [ 
    ('test_ss', 'Test 1'), 
    ('test_2_ss', 'Test 2'), 
    ('test_3_ss', 'Test 3'), 
    ('test_ss', 'Test 4') 
] 

мне нужно отсортировать этот список списков по первому пункту в каждом списке на основе заданной переменная строка.

В качестве примера, я хочу, чтобы сортировать «» test_ss к полученному списку списков будет:

sorted_list_of_lists = [ 
    ('test_ss', 'Test 1'), 
    ('test_ss', 'Test 4'), 
    ('test_2_ss', 'Test 2'), 
    ('test_3_ss', 'Test 3'), 
] 

Я пытался несколько примеров выходных SO и других (Sorting a list of lists based on a list of strings, Sorting lists based on a particular element - Python, sorting multiple lists based on a single list in python и т.д.), но не нашли правильный подход (или я просто не после этих примеров правильно.

Есть указатели?

+0

@arman - спасибо за редактирование ... Я думал, что сделал это правильно, но, видимо, я этого не сделал :) –

+0

Что делать, если первая строка из двух элементов равна, произвольная сортировка или вы хотите ввести галстук-брелок? –

+0

, видимо, вы хотите какой-то естественный вид, так как 'test_2_ss' должен появиться до' test_ss' (поскольку код '2' меньше, чем' s'). Сделайте 'sorted (list_of_lists)' и посмотрите его на себя – Pynchia

ответ

2

Вы можете использовать простую ключевую функцию:

In [59]: def compare(element): 
    ....:  return element[0] == 'test_ss' or 99999 
    ....: 

In [60]: sorted(list_of_lists, key=compare) 
Out[60]: 
[('test_ss', 'Test 1'), 
('test_ss', 'Test 4'), 
('test_2_ss', 'Test 2'), 
('test_3_ss', 'Test 3')] 
+0

Это делает именно то, что мне нужно, что идеально подходит для моей реализации. Спасибо. –

1

Если вы хотите разделить, просто вернуть False если строка ма tches:

>>> sorted(list_of_lists, key=lambda value: value[0] != 'test_ss') 
[('test_ss', 'Test 1'), 
('test_ss', 'Test 4'), 
('test_2_ss', 'Test 2'), 
('test_3_ss', 'Test 3')] 
+0

, что может оказаться хорошей дикой догадкой о том, что хочет OP – Pynchia

+0

@ Pynchia дикий догадка! –

+0

ОК, может быть, я единственный, кто не понял вопроса. Я думал, что он хочет сортировать по определенной позиции кортежа, но неясно (см. Выше мой комментарий к вопросу) – Pynchia

0

это будет делать

tuples = [ 
    ('test_ss', 'Test 1'), 
    ('test_2_ss', 'Test 2'), 
    ('test_3_ss', 'Test 3'), 
    ('test_ss', 'Test 4') 
] 

sorted(tuples, key=lambda x: x[0].replace('test_ss','test_ _ss')) 

[('test_ss', 'Test 1'), 
('test_ss', 'Test 4'), 
('test_2_ss', 'Test 2'), 
('test_3_ss', 'Test 3')] 

вы хотите, чтобы лечить 'test_ss' семантически как наименьший элемент сортировки но это не в текстовом представлении. key.replace(..) обрабатывает его.

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