Найти - Пользователи
Полная версия: sorted() в иттераторе
Начало » Python для новичков » sorted() в иттераторе
1
timofmax
Вот такой словарь 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')

FishHook
timofmax
Вот такой словарь p1.
Словарь не поддерживает сортировку.
timofmax
FishHook
да, но код рабочий.
походу понял. он берет список и его сортирует.
py.user.next
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)}
>>>
pcz
По какому признаку ты хочешь сортировать данные?
Функция sorted() принимает необязательный параметр key с функцией, которая будет возвращать как бы цену элемента. Например отсортировать массив строк по длинне строки будет sorted(strings_list, key=len)
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