Уведомления

Группа в Telegram: @pythonsu

#1 Июль 10, 2017 09:52:28

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

sorted() в иттераторе

Вот такой словарь p1. Не очень понимаю как работает sorted(i), все значения и ключи меняются местами.
расскажите пошагово, если можете. спасибо.

 [18]: p1 = {('SW1', 'Eth0/1'): ('R1', 'Eth0/0'),
 ('SW1', 'Eth0/2'): ('R2', 'Eth0/0'),
 ('SW1', 'Eth0/3'): ('R3', 'Eth0/0')}
dict(i for i in p1.items())
Out[19]: 
{('SW1', 'Eth0/1'): ('R1', 'Eth0/0'),
 ('SW1', 'Eth0/2'): ('R2', 'Eth0/0'),
 ('SW1', 'Eth0/3'): ('R3', 'Eth0/0')}
dict(sorted(i) for i in p1.items())
Out[20]: 
{('R1', 'Eth0/0'): ('SW1', 'Eth0/1'),
 ('R2', 'Eth0/0'): ('SW1', 'Eth0/2'),
 ('R3', 'Eth0/0'): ('SW1', 'Eth0/3')}

получается i принимает значения кортежей.
но у кортежей же нет метода sorted()
 ('SW1', 'Eth0/1'),
('SW1', 'Eth0/2'),
('SW1', 'Eth0/3')

Отредактировано timofmax (Июль 10, 2017 10:05:36)

Офлайн

#2 Июль 10, 2017 10:28:19

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

sorted() в иттераторе

timofmax
Вот такой словарь p1.
Словарь не поддерживает сортировку.



Офлайн

#3 Июль 10, 2017 10:29:46

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

sorted() в иттераторе

FishHook
да, но код рабочий.
походу понял. он берет список и его сортирует.

Офлайн

#4 Июль 10, 2017 14:07:46

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

sorted() в иттераторе

timofmax
Не очень понимаю как работает sorted(i)
А что ты делаешь, тоже не очень понятно.

timofmax
получается i принимает значения кортежей.
но у кортежей же нет метода sorted()
  
>>> sorted((1, 2))
[1, 2]
>>>
sorted() от кортежа даст список, а список нельзя использовать в качестве ключа словаря, потому что он не хешируется (неизвестно, как его сохранять в словаре).
  
>>> {[1, 2]: 3}
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>>

Фактически получается вот это
  
>>> dict([[(1, 2), (3, 4)], [(5, 6), (7, 8)]])
{(1, 2): (3, 4), (5, 6): (7, 8)}
>>>



Отредактировано py.user.next (Июль 10, 2017 14:11:03)

Офлайн

#5 Июль 11, 2017 00:21:49

pcz
Зарегистрирован: 2017-07-10
Сообщения: 4
Репутация: +  1  -
Профиль   Отправить e-mail  

sorted() в иттераторе

По какому признаку ты хочешь сортировать данные?
Функция sorted() принимает необязательный параметр key с функцией, которая будет возвращать как бы цену элемента. Например отсортировать массив строк по длинне строки будет sorted(strings_list, key=len)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version