Как отсортировать словарь по значению, если мое значение является кортежем? - PullRequest
0 голосов
/ 20 января 2020

Я хочу отсортировать по второму значению индекса кортежа, и кортеж - это значение для данного словаря.

Вот этот словарь:

dict={'123456789': ('*2L 2% Vitali Mil', 47, '(780) 789 0123', 121.26), '123456798': ('*1L 2% Vitali Mil', 41, '(780) 890 7654', 59.45)}

Мне нужно Сортируйте это по номеру телефона ie '(780) 789 0123' и '(780) 890 7654'

Я попытался sorted(dict.items, key=lambda item: item[1][2]), но это вызывает ошибку при использовании метода форматирования для моей программы.

1 Ответ

0 голосов
/ 29 января 2020

Это можно сделать с помощью sorted() - обратите внимание, что разница между моим примером и вашим заключается в том, что мой сортирует результат метода d.items(), который возвращает список кортежей ключ-значение, а ваш пытается отсортировать * 1003. *, который является ссылкой на саму функцию. Мы также можем отформатировать результат как словарь, используя словарь-понимание; например:

>>> d = {'123456798': ('*1L 2% Vitali Mil', 41, '(780) 890 7654', 59.45),
         '123456789': ('*2L 2% Vitali Mil', 47, '(780) 789 0123', 121.26)}

>>> sorted(d.items(), key=lambda item: item[1][2])
[('123456789', ('*2L 2% Vitali Mil', 47, '(780) 789 0123', 121.26)),
 ('123456798', ('*1L 2% Vitali Mil', 41, '(780) 890 7654', 59.45))]

>>> {k: v for k, v in sorted(d.items(), key=lambda item: item[1][2])}
{'123456789': ('*2L 2% Vitali Mil', 47, '(780) 789 0123', 121.26),
 '123456798': ('*1L 2% Vitali Mil', 41, '(780) 890 7654', 59.45)}

Обратите внимание, что вы не должны использовать встроенную переменную dict для именования своих словарей - при этом перезаписывается класс dict, поэтому, если вы попытаетесь использовать dict() в В будущем результаты будут не такими, как ожидалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...