创建新字典以先对键排序,然后根据值排序

2024-05-16 23:11:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道这些都是惰性物质。我正在尝试制作一个新的字典,它按字母顺序对“键”进行排序,然后对元组中最后一个元素的值进行排序

词典当前:

D1 = {'Lakers': [('James','PG',23,2), ('Davis', 'PF', 3, 3), ('Johnson', 'PG', 33, 
1)], 'Pistons': [('Billips', 'PG', 1, 1 ), ('Wallace', 'C', 3, 3)], 'Hawks': 
[('Young', 'PG', 11, 1), ('Collins', 'PF', 3, 2)] }

我想要的字典:

New_D1 = { 'Hawks':[('Collins', 'PF', 3, 2),('Young', 'PG', 11, 1)], 'Lakers': [('Davis', 'PF', 3, 3),('James','PG',23,2), ('Johnson', 'PG', 33, 1)], 'Pistons': [('Wallace', 'C', 3, 3),('Billips', 'PG', 1, 1 ) ] }

我当前要排序的代码是:

New_D1  = dict(sorted(D1.items()))

这将创建一个新字典(new_D1)并仅对键进行排序。我现在需要对元组列表的最后一个元素中的值进行排序


Tags: 元素字典排序d1元组pgpfwallace
3条回答

您需要构建一个新的dict,通过排序键插入,并添加同样排序的值

result ={}
for key, val in sorted(D1.items()):
    result[key] = sorted(val, key=lambda x: x[-1], reverse=True)

您可以内联修改,而不使用带有dict理解的tierce dict

D1 = {key: sorted(val, key=lambda x: x[-1], reverse=True) for key, val in sorted(D1.items())}

您可以使用itemgetter

>>> from operator import itemgetter
>>> {k:sorted(v, key=itemgetter(3)) for k,v in New_D1.items()}

{'Hawks': [('Young', 'PG', 11, 1), ('Collins', 'PF', 3, 2)], 
'Lakers': [('Johnson', 'PG', 33, 1), ('James', 'PG', 23, 2), ('Davis', 'PF', 3, 3)], 
'Pistons': [('Billips', 'PG', 1, 1), ('Wallace', 'C', 3, 3)]}

你可以在已经做过的分类的基础上,作为一种理解:

>>> {k: sorted(v, key=lambda t: -t[-1]) for k, v in sorted(D1.items())}
{'Hawks': [('Collins', 'PF', 3, 2), ('Young', 'PG', 11, 1)], 'Lakers': [('Davis', 'PF', 3, 3), ('James', 'PG', 23, 2), ('Johnson', 'PG', 33, 1)], 'Pistons': [('Wallace', 'C', 3, 3), ('Billips', 'PG', 1, 1)]}

相关问题 更多 >