Python [习题] 字典排序

[习题] 对此字典分别按照value 和key 如何排序?

dic1 = {'and':40, 'a':54, 'is':60, 'path':139, 'the':124, 'os':49}

In [38]: dic1 = {'and':40, 'a':54, 'is':60, 'path':139, 'the':124, 'os':49}
    ...: print(sorted(zip(dic1.values(),dic1.keys())))                       #按value的值升序
    ...: print(sorted(zip(dic1.values(),dic1.keys()),reverse=True))          #按value的值降序
    ...:
    ...: print(sorted(zip(dic1.keys(),dic1.values())))                       #按key的ascii码升序
    ...: print(sorted(zip(dic1.keys(),dic1.values()),reverse=True))          #按key的ascii码降序
    ...:
    ...: print(sorted(dic1.items(),key=lambda x:x[1],))                      #按value的值升序
    ...: print(sorted(dic1.items(),key=lambda x:x[1],reverse=True))          #按value的值降序
    ...:
    ...: print(sorted(dic1.items(),key=lambda x:x[0],))                      #按key的ascii码升序
    ...: print(sorted(dic1.items(),key=lambda x:x[0],reverse=True))          #按key的ascii码降序
    ...:
[(40, 'and'), (49, 'os'), (54, 'a'), (60, 'is'), (124, 'the'), (139, 'path')]
[(139, 'path'), (124, 'the'), (60, 'is'), (54, 'a'), (49, 'os'), (40, 'and')]

[('a', 54), ('and', 40), ('is', 60), ('os', 49), ('path', 139), ('the', 124)]
[('the', 124), ('path', 139), ('os', 49), ('is', 60), ('and', 40), ('a', 54)]

[('and', 40), ('os', 49), ('a', 54), ('is', 60), ('the', 124), ('path', 139)]
[('path', 139), ('the', 124), ('is', 60), ('a', 54), ('os', 49), ('and', 40)]

[('a', 54), ('and', 40), ('is', 60), ('os', 49), ('path', 139), ('the', 124)]
[('the', 124), ('path', 139), ('os', 49), ('is', 60), ('and', 40), ('a', 54)]

  

知识点: zip(),sorted(),lambda

zip: 

zip函数接受任意多个(包括0个和1个)序列作为参数,返回一个tuple列表。

用法: zip(iter1 [,iter2 [...]]) --> zip object:

In [79]: a = 'abcdefg'

In [80]: b = '1234567890'

In [81]: zip(a,b)
Out[81]: <zip at 0x1ce2b8d4fc8>

In [82]: c = zip(a,b)

In [83]: for i in c:
    ...:     print(i)
    ...:
('a', '1')
('b', '2')
('c', '3')
('d', '4')
('e', '5')
('f', '6')
('g', '7')

sorted:

对指定可迭代对象iterable 排序并返回一个新对象,不改变原数据;key 可以设置为按str、int或者指定值(如字典的value)排序,默认是None,将按照默认对象类型排序,如果对象是str,则按ascii 码排序,如果是对象是int 数字,则按数字排序;reverse 默认升序(False),True 为降序。

sorted(iterable, key=None, reverse=False)

lambda:

最后两处lambda 比较绕,可以在( http://pythontutor.com/visualize.html#mode=display )这个网站边调试边分析x 和x[1] 的值是什么。

以下截图中,lambda表达式中x的值是一个tuple("and",40),x[1] 就表示第1个元素(40),最终sorted 就是按字典的value 来进行排序。

原文地址:https://www.cnblogs.com/i-honey/p/7735636.html