在python中排序字典值 - 按字母顺序降序

时间:2014-11-23 20:24:19

标签: python sorting dictionary

我有一本字典: -

higharr = {'Alex':2,
           'Steve':3,
           'Andy':4,
           'Wallace':6,
           'Andy':3,
           'Andy':5,
           'Dan':1,
           'Dan':0,
           'Steve':3,
           'Steve':8}

for score in sorted(higharr.values(), reverse=True):
    print (score)

我想打印带有值的键,其值以字母顺序递减。下降部分正在工作,但我不确定如何在其左侧添加相应的键。

谢谢

4 个答案:

答案 0 :(得分:0)

您可以使用其他数据结构,因为您有重复的密钥。 但总的来说,你可能会考虑这个:

from operator import itemgetter
for i in sorted(higharr.items(), key=itemgetter(1), reverse=True):
    print i

答案 1 :(得分:0)

这就是你在寻找什么?

for key, score in sorted(higharr.values(), reverse=True):
    print (key, score)

答案 2 :(得分:0)

你关闭了。枚举字典的项目并使用自定义排序键:

>>> for name, score in sorted(higharr.iteritems(), key=lambda item:item[1], reverse=True):
...     print name, score
...
Steve 8
Wallace 6
Andy 5
Alex 2
Dan 0
>>>

答案 3 :(得分:0)

首先,对于词典中的哪些条目是“键”以及哪些是“值”,可能会有一些混淆。在Python中,通过{key:value}形成具有键值对的字典。因此,在higharr中,键是名称,值是整数 名字的权利。

正如其他人所提到的,higharr可能无法完全按照您的预期运行,因为字典的键(名称)不是唯一的:

>>> higharr = {'Alex':2,
               'Steve':3,
               'Andy':4,
               'Wallace':6,
               'Andy':3,
               'Andy':5,
               'Dan':1,
               'Dan':0,
               'Steve':3,
               'Steve':8}

>>> higharr
{'Steve': 8, 'Alex': 2, 'Wallace': 6, 'Andy': 5, 'Dan': 0}

如您所见,您添加的后续键值对将覆盖之前的键值对。 话虽这么说,您可以在字典中对所有唯一键进行排序和打印,如下所示:

>>> for entry in sorted(higharr.items(), key = lambda x: x[1], reverse=True)
...     print(entry)
...
('Steve', 8)
('Wallace', 6)
('Andy', 5)
('Alex', 2)
('Dan', 0)

如果你想通过按字母顺序降序对键进行排序,你可以做同样的事情:

>>> for entry in sorted(higharr.items(), key=lambda x: x[0], reverse=True):
...     print(entry)
... 
('Wallace', 6)
('Steve', 8)
('Dan', 0)
('Andy', 5)
('Alex', 2)