python根据字典值排序

根据字典的值对字典进行排序

示例字典:

1
2
3
4
5
6
7
prices = {
'ACME': 45.23,
'AAPL': 612.78,
'IBM': 205.55,
'HPQ': 37.2,
'FB': 10.75
}

按键排序

正常sorted都是对键进行排序,例如:

1
2
3
4
print(sorted(prices.items()))

#输出
[('AAPL', 612.78), ('ACME', 45.23), ('FB', 10.75), ('HPQ', 37.2), ('IBM', 205.55)]

是根据键的字母顺序排序

值最大值和最小值

类似示例字典,值是个数字,如果要对字典的值求最大和最小值,简单的办法就是反转字典,键变成值,值变成键,zip()正好可以做到

1
2
3
4
5
6
7
8
min_price = min(zip(prices.values(), prices.keys()))
max_price = max(zip(prices.values(), prices.keys()))
print(min_price)
print(max_price)

# 输出
(10.75, 'FB')
(612.78, 'AAPL')

按值排序

方案一: 反转键值再排序

1
2
3
4
5
price_sort = dict(sorted(zip(prices.values(), prices.keys())))
print(dict(zip(price_sort.values(), price_sort.keys())))

# 输出:
{'FB': 10.75, 'HPQ': 37.2, 'ACME': 45.23, 'IBM': 205.55, 'AAPL': 612.78}

先反转键值对再排序,排序完成再反转回去

方案二:使用匿名函数

1
2
3
4
5
sort_dict = sorted(prices.items(), key=lambda item:item[1])
print(dict(sort_dict))

# 输出
{'FB': 10.75, 'HPQ': 37.2, 'ACME': 45.23, 'IBM': 205.55, 'AAPL': 612.78}

sorted的key值,指定字典项的第二个值,也就是字典的值

方案三:自定义获取key的函数

思路就是:
1.对values进行排序
2.遍历排序完的values列表
3.构造空字典,按照上一步遍历的value插入原来字典对应的key和value
这边就需要自己构造一个根据value获取key的函数

1
2
3
4
5
def get_key(dict, value):
# return (k for k,v in dict.items() if v == value)
for k, v in dict.items():
if v == value:
return k

排序实现:

1
2
3
4
5
6
7
8
d = {}

for i in sorted(prices.values()):
d[get_key(prices, i)] = i

print(d)
# 输出
{'FB': 10.75, 'HPQ': 37.2, 'ACME': 45.23, 'IBM': 205.55, 'AAPL': 612.78}

以上,完~

文章目录
  1. 按键排序
  2. 值最大值和最小值
  3. 按值排序
    1. 方案一: 反转键值再排序
    2. 方案二:使用匿名函数
    3. 方案三:自定义获取key的函数
|