python - 如何使用值对字典进行排序并能够访问键

标签 python python-3.x dictionary

dic = {'Tea': 35, 'Coffee': 35, 'Chocolate': 10}

我想按值降序对这个字典进行排序,但我怎样才能访问键呢?

示例代码:

for x in sorted(dic.values()):
    print(key, dic[key])

我还希望在值相等时按字母顺序对输出进行排序。

预期输出:

Coffee 35
Tea 35
Chocolate 10

最佳答案

你要的是the dict.items() method ,它提供了 (key, value) 元组。

要按值排序,然后使用 key 方法,在本例中为 operator.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 将对第一个值进行排序,然后对第二个值进行排序,依此类推...唯一的问题是使用 reverse will意味着我们按错误的顺序得到它们。作为 hack,我们简单地使用值的负数版本来排序而不进行反向排序:

>>> for key, value in sorted(dic.items(), key=lambda x: (-x[1], x[0])):
...     print(key, value)
... 
Coffee 35
Tea 35
Chocolate 10

关于python - 如何使用值对字典进行排序并能够访问键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11139038/

相关文章:

python - 处理 POSTed 多部分/表单数据文件

python - Python 中的 input() 函数可以动态检测输入的数据类型吗?

c++ - 如何使用以用户定义类型为键的std::maps?

python - 使用 Python 根据文件内容编写 splunk 查询

python - 未知标签类型 : 'continuous'

python - 如何用8个点形成一个平面?

python - Adafruit 电机帽 python3

python-3.x - Python3 : convert big int to float - wrong result - how do it right?

c# - 为任意图像实现可点击的 map

Python:读取文件并将其转换为字典,其中第一行+第二行是关键