python - 字典排序 - 分别按照key值、value值进行
·
看到排序,首先想到的就是python内建函数sorted() 和列表内建函数sort()
注意:
他们是不一样的:
① sort是在原位重新排列列表(没有返回值,不小心就容易出错,可以看没有返回值的函数),而sorted()是产生一个新的列表;
② sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
正题
1、字典按照key排序
直接调用 sorted(iterable,key,reverse)
其中:
- iterable表示可以迭代的对象,例如可以是dict.items()、dict.keys()等
- key是一个函数,用来选取参与比较的元素
- reverse则是用来指定排序是倒序还是顺序,reverse=true则是倒序(从大到小),reverse=false则是顺序(从小到大),默认是reverse=false
>>> test_dict = {'a':1, 's':5, 'd':2, 'f':3}
>>> sorted(test_dict.keys())
['a', 'd', 'f', 's']
>>> test_dict # 产生一个新的字典,故原字典没变
{'a': 1, 's': 5, 'd': 2, 'f': 3}
>>> sorted(test_dict.keys(), reverse = True)
['s', 'f', 'd', 'a']
>>> res = sorted(test_dict.keys(), reverse = True)
>>> res # 产生一个新的字典
['s', 'f', 'd', 'a']
>>> test_dict.sort() # 前面说了sort 是 list 方法,故:AttributeError: 'dict' object has no attribute 'sort'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'dict' object has no attribute 'sort'
2、按照value值排序
有三种方法可以实现将字典按照value值进行排序
先说一下 dict.items() 方法,返回可遍历的(键, 值) 元组数组
>>> test_dict.items()
dict_items([('a', 1), ('s', 5), ('d', 2), ('f', 3)])
(1)key使用lambda匿名函数取value进行排序
>>> sorted(test_dict.items(), key=lambda item:item[1])
[('a', 1), ('d', 2), ('f', 3), ('s', 5)]
>>> sorted(test_dict.items(), key=lambda item:item[1], reverse = True)
[('s', 5), ('f', 3), ('d', 2), ('a', 1)]
(2)使用operator的itemgetter进行排序
itemgetter 函数用于获取对象的哪些位置的数据,参数即为代表位置的序号值
>>> import operator
>>> sorted(test_dict.items(), key=operator.itemgetter(1))
[('a', 1), ('d', 2), ('f', 3), ('s', 5)]
>>> sorted(test_dict.items(), key=operator.itemgetter(1), reverse = True)
[('s', 5), ('f', 3), ('d', 2), ('a', 1)]
(3)将key和value分装成元组,再进行排序
>>> test_dict.keys()
dict_keys(['a', 's', 'd', 'f'])
>>> test_dict.values()
dict_values([1, 5, 2, 3])
>>> f = zip(test_dict.keys(), test_dict.values())
>>> f
<zip object at 0x000002C983BD10C8>
>>> sorted(f)
[('a', 1), ('d', 2), ('f', 3), ('s', 5)]
>>> test_dict
{'a': 1, 's': 5, 'd': 2, 'f': 3}
可能会对上面的排序结果疑惑,解释一下元组的排序规则,
先按元组的第一个元素进行排序再按第二个元素进行排序,是根据ASCII编码排序的
>>> sort(['a','s','A','d','f'])
array(['A', 'a', 'd', 'f', 's'], dtype='<U1')
常见ASCII码的大小规则:0~ 9<A~ Z<a~z。
1)数字比字母要小。如 “7”<“F”;
2)数字0比数字9要小,并按0到9顺序递增。如 “3”<“8” ;
3)字母A比字母Z要小,并按A到Z顺序递增。如“A”<“Z” ;
4)同个字母的大写字母比小写字母要小32。如“A”<“a” 。
几个常见字母的ASCII码大小: “A”为65;“a”为97;“0”为 48
更多推荐



所有评论(0)