сортировать значения списков внутри словаря по длине символов - PullRequest
0 голосов
/ 23 сентября 2019
d = {'A': ['A11117',
 '33465'
 '17160144',
 'A11-33465',
 '3040',
 'A11-33465 W1',
 'nor'], 'B': ['maD', 'vern', 'first', 'A2lRights']}

У меня есть словарь d, и я хотел бы отсортировать значения по длине символов.Например, для ключа A значение A11-33465 W1 будет первым, потому что оно содержит 12 символов, за которым следует 'A11-33465', потому что оно содержит 9 символов и т. Д. Я хотел бы получить следующий вывод:

d = {'A': ['A11-33465 W1', 
' A11-33465',
 '17160144',
 'A11117',
 '33465',
 '3040',
 'nor'], 
'B': ['A2lRights',
'first',
'vern',
'maD']}

(Iпонимаю, что словари не могут быть отсортированы, но у меня есть примеры ниже, которые не работают для меня, но ответ содержит словарь, который был отсортирован)

Я попробовал следующее

Python сортировка словаря по длине значений

print(' '.join(sorted(d, key=lambda k: len(d[k]), reverse=True)))

Сортировка словаря по длине значения

sorted_items = sorted(d.items(), key = lambda item : len(item[1]))
newd = dict(sorted_items[-2:])

Как сортироватьсловарь по значению?

import operator
sorted_x = sorted(d.items(), key=operator.itemgetter(1))

Но оба они не дают мне то, что я ищу.

Как получить желаемый результат?

1 Ответ

3 голосов
/ 23 сентября 2019

Вы не сортируете dict, вы сортируете списки внутри него.Самым простым будет цикл, который сортирует списки по месту:

for k, lst in d.items():
    lst.sort(key=len, reverse=True)

Это превратит d в:

{'A': ['3346517160144', 'A11-33465 W1', 'A11-33465', 'A11117', '3040', 'nor'], 
 'B': ['A2lRights', 'first', 'vern', 'maD']}

Если вы хотите сохранить исходные данные в неизменном виде,используйте понимание как:

sorted_d = {k: sorted(lst, key=len, reverse=True) for k, lst in d.items()}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...