Форум сайта python.su
Привет! Есть список с кортежами, каким образом можно cортировать список по одному значению в кортеже?
Например по первому значению в кортеже : [ (678, 678, ‘value’), (290179560907415603, ‘a key’, 100),
(8547278478136085765, ‘another key’, 101) ]
Второй вопрос. Нужно вывести третье значение из кортежа в списке введя второе значение, то есть сделать то же самое что и функция get() при работе со словарями. Например чтобы ‘another key’ мог вернуть число 101, так как они находятся в одном кортеже.
Спасибо за помощь!
Офлайн
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'
Отредактировано old_monty (Дек. 25, 2016 23:14:27)
Офлайн
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] >>>
Отредактировано py.user.next (Дек. 26, 2016 03:29:24)
Офлайн