如果值相同,如何对字典中的键排序?

2024-09-30 02:17:20 发布

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

按分数对词典排序。如果分数相同,则按名称排序

import operator
dt={ 
'sudha'  : {'score' : 75} ,
'Amruta' : {'score' : 95} ,
'Ramesh' : {'score' : 56} ,
'Shashi' : {'score' : 78} ,
'Manoj'  : {'score' : 69} ,
'Resham'  : {'score' : 95} 
} 

sorted_x1 = sorted(dt.items(), key=operator.itemgetter(1))
print sorted_x1

输出为:

[('Ramesh', {'score': 56}), ('Manoj', {'score': 69}), 
 ('sudha', {'score':           75}), 
 ('Shashi', {'score': 78}),   ('Resham', {'score': 95}), ('Amruta',{'score': 95})]

现在我想按名称对最后两个元素排序,因为它们的分数是相同的。你知道吗


Tags: 名称排序dtoperator分数词典scoresorted
3条回答

您可以将要排序的元素作为元组或列表发送,排序将首先在第一个元素上进行,如果第一个元素相同,则排序将移动到下一个元素。你知道吗

示例-

>>> dt={
... 'sudha'  : {'score' : 75} ,
... 'Amruta' : {'score' : 95} ,
... 'Ramesh' : {'score' : 56} ,
... 'Shashi' : {'score' : 78} ,
... 'Manoj'  : {'score' : 69} ,
... 'Resham'  : {'score' : 95}
... }
>>>
>>> sorted_x1 = sorted(dt.items(), key=lambda x: (x[1]['score'], x[0]))
>>> sorted_x1
[('Ramesh', {'score': 56}), ('Manoj', {'score': 69}), ('sudha', {'score': 75}), ('Shashi', {'score': 78}), ('Amruta', {'score': 95}), ('Resham', {'score': 95})]

小心,您的代码实际上是比较dicts本身,而不是分数。ie公司

{'score': 56} < {'score': 69}

如果字典里有多余的键,可能会引起意外。您可以安排key函数返回scorekeytuple。你知道吗

sorted_x1 = sorted(dt.items(), key=lambda (k, v): (v['score'], k))

如果有人需要在Python3中这样做,您将不得不避免在lambda中解包元组,因为这不再是允许的。你知道吗

sorted_x1 = sorted(dt.items(), key=lambda k_v: (k_v[1]['score'], k_v[0]))

这是一种方法:

k = sorted(dt, key=dt.__getitem__)
v = sorted(dt.values())
sorted_dt_scores = zip(k,v)

打印sorted_dt_scores时输出:

[('Ramesh', {'score': 56}), ('Manoj', {'score': 69}), ('sudha', {'score': 75}), ('Shashi', {'score': 78}), ('Resham', {'score': 95}), ('Amruta', {'score': 95})]

相关问题 更多 >

    热门问题