zoukankan      html  css  js  c++  java
  • Python: sort,sorted,OrderedDict的用法 OrderedDict与Dict的区别

    OrderedDict是collections中的一个包,能够记录字典元素插入的顺序,常常和排序函数一起使用来生成一个排序的字典。

    比如,比如一个无序的字典

    d = {‘banana’:3,’apple’:4,’pear’:1,’orange’:2}

    通过排序来生成一个有序的字典,有以下几种方式

    collections.OrderedDict(sorted(d.items(),key = lambda t:t[0]))

    或者

    collections.OrderedDict(sorted(d.items(),key = lambda t:t[1]))

    或者

    collections.OrderedDict(sorted(d.items(),key = lambda t:len(t[0])))

     

    Python中的字典对象可以以“键:值”的方式存取数据。OrderedDict是它的一个子类,实现了对字典对象中元素的排序。比如下面比较了两种方式的不同:

    [python] view plaincopy
    1. mport collections  
    2.   
    3. print 'Regular dictionary:'  
    4. d={}  
    5. d['a']='A'  
    6. d['b']='B'  
    7. d['c']='C'  
    8. for k,v in d.items():  
    9.     print k,v  
    10.   
    11. print '\nOrderedDict:'  
    12. d=collections.OrderedDict()  
    13. d['a']='A'  
    14. d['b']='B'  
    15. d['c']='C'  
    16. for k,v in d.items():  
    17.     print k,v
     
     
     输出结果如下:
    [plain] view plaincopy
    1. Regular dictionary:  
    2. a A  
    3. c C  
    4. b B  
    5.   
    6. OrderedDict:  
    7. a A  
    8. b B  
    9. c C  

    可以看到,同样是保存了ABC三个元素,但是使用OrderedDict会根据放入元素的先后顺序进行排序。由于进行了排序,所以OrderedDict对象的字典对象,如果其顺序不同那么Python也会把他们当做是两个不同的对象,比如下面的代码:
    [python] view plaincopy
    1. import collections  
    2.   
    3. print 'Regular dictionary:'  
    4. d1={}  
    5. d1['a']='A'  
    6. d1['b']='B'  
    7. d1['c']='C'  
    8.   
    9. d2={}  
    10. d2['c']='C'  
    11. d2['a']='A'  
    12. d2['b']='B'  
    13.   
    14. print d1==d2  
    15.   
    16. print '\nOrderedDict:'  
    17. d1=collections.OrderedDict()  
    18. d1['a']='A'  
    19. d1['b']='B'  
    20. d1['c']='C'  
    21.   
    22. d2=collections.OrderedDict()  
    23. d2['c']='C'  
    24. d2['a']='A'  
    25. d2['b']='B'  
    26.   
    27. print  d1==d2  


    其输出结果为:

    [plain] view plaincopy
      1. Regular dictionary:  
      2. True  
      3.   
      4. OrderedDict:  
      5. False  
  • 相关阅读:
    bert系列一:《Attention is all you need》论文解读
    维特比算法及python实现
    手写高斯混合聚类算法
    强化学习应用于游戏Tic-Tac-Toe
    EM算法分析
    手写LVQ(学习向量量化)聚类算法
    手写k-means算法
    tensorflow增强学习应用于一个小游戏
    Opencv之LBP特征(算法)
    手写朴素贝叶斯(naive_bayes)分类算法
  • 原文地址:https://www.cnblogs.com/andy071001/p/2973931.html
Copyright © 2011-2022 走看看