dic = {'Tea': 35, 'Coffee': 35, 'Chocolate': 10}
我想按值按降序对这个字典进行排序,但是我怎样才能访问键呢?
示例代码:
for x in sorted(dic.values()):
print(key, dic[key])
我还希望在值相等时按字母顺序对输出进行排序。
预期输出:
Coffee 35
Tea 35
Chocolate 10
dic = {'Tea': 35, 'Coffee': 35, 'Chocolate': 10}
我想按值按降序对这个字典进行排序,但是我怎样才能访问键呢?
示例代码:
for x in sorted(dic.values()):
print(key, dic[key])
我还希望在值相等时按字母顺序对输出进行排序。
预期输出:
Coffee 35
Tea 35
Chocolate 10
您想要的是提供元组的dict.items()
方法(key, value)
。
要按值排序,然后使用一种key
方法,在这种情况下,anoperator.itemgetter()
从元组中获取第二个值进行排序,然后设置reverse
属性以按您想要的顺序获取它们。
>>> from operator import itemgetter
>>> dic={'Tea': 35, 'Coffee': 35, 'Chocolate': 10}
>>> for key, value in sorted(dic.items(), key=itemgetter(1), reverse=True):
... print(key, value)
...
Tea 35
Coffee 35
Chocolate 10
编辑:如果你想按键排序作为二级排序,我们可以简单地传递一个值的元组,Python 将排序第一个值,然后是第二个,等等......唯一的问题是使用反向将意味着我们得到他们以错误的顺序。作为一种技巧,我们只需使用负数版本的值进行排序,而无需反向:
>>> for key, value in sorted(dic.items(), key=lambda x: (-x[1], x[0])):
... print(key, value)
...
Coffee 35
Tea 35
Chocolate 10
一种选择:
for key in sorted(dic, key=dic.get, reverse=True):
print(key,dic[key])
这对字典的键进行排序,但dic.get
用作键功能,从而有效地按值排序。您的示例输出表明您要按降序排序,所以我包括了reverse=True
.
编辑:如果您的字典值实际上是计数,您可以考虑使用 acollections.Counter
而不是字典。该类有一个most_common()
按所需顺序返回项目的方法。
其他建议的答案dict.items()
部分正确。但是由于您想在排序过程中包含密钥(如果我理解您是正确的),您想要反转项目(本质上是一个 tuple (key, value)
)。所以使用
data={'Tea': 35, 'Coffee': 35, 'Chocolate': 10}
for item in sorted(dic.items(), key=lambda it: (-it[1], it[0])):
print item
该key
参数给出了一个用于对项目进行排序的函数。它将项目转换为一个键,然后真正用于排序。
在您的情况下,您需要混合降序/升序排序,以便首先将此处给出的项目变成
(-35, 'Coffee')
(-35, 'Tea')
(-10, 'Chocolate')
并按该顺序打印。(替换过程只是为了排序而发生的,实际返回的项目是原始项目。)