Найти - Пользователи
Полная версия: Сортировать список с кортежами
Начало » Python для новичков » Сортировать список с кортежами
1
ProPall
Привет! Есть список с кортежами, каким образом можно cортировать список по одному значению в кортеже?
Например по первому значению в кортеже : [ (678, 678, ‘value’), (290179560907415603, ‘a key’, 100),
(8547278478136085765, ‘another key’, 101) ]
Второй вопрос. Нужно вывести третье значение из кортежа в списке введя второе значение, то есть сделать то же самое что и функция get() при работе со словарями. Например чтобы ‘another key’ мог вернуть число 101, так как они находятся в одном кортеже.
Спасибо за помощь!
old_monty
ProPall
Например по первому значению в кортеже :
Исходный список уже и так отсортирован по первым значениям в кортежах, поэтому я немного поменял местами его элементы, для наглядности.
 >>>lst =  [(290179560907415603, 'a key', 100), (8547278478136085765, 'another key', 101), (678, 678, 'value')]
>>> sorted_lst = sorted(lst, key = lambda i: i[0])
>>> sorted_lst
[(678, 678, 'value'), (290179560907415603, 'a key', 100), (8547278478136085765, 'another key', 101)]
ProPall
Второй вопрос. Нужно вывести третье значение из кортежа в списке введя второе значение, то есть сделать то же самое что и функция get() при работе со словарями. Например чтобы ‘another key’ мог вернуть число 101, так как они находятся в одном кортеже.
Я сделал так:
 >>> def func(elem, lst):
...        for i in range(len(lst)):
...           if lst[i][1] == elem:
...              return lst[i][2]
...        else:
...           return None
... 
>>> func('a key', lst)
100
>>> func('another key', lst)
101
>>> func(678, lst)
'value'
py.user.next
ProPall
Например по первому значению в кортеже
По первому значению просто применяешь sorted() без всего. Кортежи при сортировке сначала упорядочиваются по первым элементам, а если те одинаковые, то по вторым элементам, и так далее.
  
>>> lst = [(290179560907415603, 'a key', 100),
...        (8547278478136085765, 'another key', 101),
...        (678, 678, 'value')]
>>> 
>>> list(sorted(lst))
[(678, 678, 'value'), (290179560907415603, 'a key', 100), (8547278478136085765, 'another key', 101)]
>>>

  
>>> lst = [(290179560907415603, 'a key', 100),
...        (8547278478136085765, 'another key', 101),
...        (678, 678, 'value')]
>>> 
>>> lst.sort()
>>> lst
[(678, 678, 'value'), (290179560907415603, 'a key', 100), (8547278478136085765, 'another key', 101)]
>>>

ProPall
Нужно вывести третье значение из кортежа в списке введя второе значение, то есть сделать то же самое что и функция get() при работе со словарями.

  
>>> lst = [(678, 678, 'value'),
...        (290179560907415603, 'a key', 100),
...        (8547278478136085765, 'another key', 101)]
>>> 
>>> [c for a, b, c in lst if b == 'another key']
[101]
>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB