根据字典的值对字典进行排序
示例字典:
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}
|
以上,完~