根据字符长度对字典中列表的值进行排序

时间:2019-09-23 13:35:35

标签: python-3.x string list sorting dictionary

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']}

(我知道字典无法排序,但下面的示例对我来说不起作用,但答案包含已排序的字典)

我尝试了以下

python sorting dictionary by length of values

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

Sort a dictionary by length of the value

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

How do I sort a dictionary by value?

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

但是他们俩都没有给我我想要的东西。

如何获得所需的输出?

1 个答案:

答案 0 :(得分:3)

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()}