Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 25, 2016 20:42:18

ProPall
Зарегистрирован: 2016-10-10
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Сортировать список с кортежами

Привет! Есть список с кортежами, каким образом можно cортировать список по одному значению в кортеже?
Например по первому значению в кортеже : [ (678, 678, ‘value’), (290179560907415603, ‘a key’, 100),
(8547278478136085765, ‘another key’, 101) ]
Второй вопрос. Нужно вывести третье значение из кортежа в списке введя второе значение, то есть сделать то же самое что и функция get() при работе со словарями. Например чтобы ‘another key’ мог вернуть число 101, так как они находятся в одном кортеже.
Спасибо за помощь!

Офлайн

#2 Дек. 25, 2016 23:01:34

old_monty
Зарегистрирован: 2015-09-27
Сообщения: 238
Репутация: +  20  -
Профиль   Отправить e-mail  

Сортировать список с кортежами

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)

Офлайн

#3 Дек. 26, 2016 03:28:58

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9993
Репутация: +  857  -
Профиль   Отправить e-mail  

Сортировать список с кортежами

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)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version