zoukankan      html  css  js  c++  java
  • python创建有序字典及字典按照值的大小进行排序

    有序字典

      在Python中,字典类型里面的元素默认是无序的,但是我们也可以通过collections模块创建有序字典

    # -*- coding:utf-8 -*-
    # python有序字典需导入模块collections
    import collections
    # 通过OrderedDict类创建的字典是有序的
    dic = collections.OrderedDict()
    dic['k1'] = 'v1'
    dic['k2'] = 'v2'
    dic['k3'] = 'v3'
    print(dic)
     
    """
        类似通过列表的方式来实现字典有序
        创建列表,添加列表元素k1时,再将k1作为字典的键,
        因为列表是序的,所以遍历列表就可有序的遍历出字典所有的key
    """
    dic = {'K1': 'V1', 'K2': 'V2', 'K3': 'V3'}
    li = ['k1', 'k2', 'k3']

    字典排序(按照值的大小)

      首先我们生成一个随机字典

    from random import randint
    d={x:randint(60,99) for x in "abcdefg"}   # {'a': 62, 'b': 97, 'c': 87, 'd': 68, 'e': 91, 'f': 76, 'g': 88}

    第一种方式:利用collections的子类Counter从大到小排序

    c=Counter(d).most_common() #返回一个列表,按照dict的value从大到小排序
    print(c)# 返回值是一个list,list里面的元素是tuple的形式

    第二种方式:sorted函数

      可以对列表[]进行从小到大排序,对于字典{}dict,sorted函数默认只按照dict的key进行排序,所以要对dict进行调整变形。

      1、利用zip函数把dict转换成一个列表,列表中每个元素都是一个tuple,tuple大小比较原理是,先比较第一个元素,第一个相同在比较第二个。

      2、利用sorted函数对转换后的列表进行排序。

    z=zip(d.values(),d.keys())   #[(62, 'a'), (97, 'b'), (87, 'c'), (68, 'd'), (91, 'e'), (76, 'f'), (88, 'g')],然后对这个列表进行sorted排序
    sorted(z)

    第三种方式:sorted + lambda

      sorted函数可以这种集合进行指定元素排序。 

    sorted(d.items(),key=lambda x:x[1])
    """
    第一个参数是需要排序的列表,第二个参数是指定key(列表中每一项的第几个元素)来进行排序。 
    解释这句代码:d.items()返回的是一个列表 [('a', 74), ('b', 90), ('c', 84), ('d', 85), ('e', 64), ('f', 66), ('g', 88)] 
    sorted会对d.items()这个list进行遍历,把list中的每一个元素,也就是每一个tuple()当做x传入匿名函数lambda x:x[1],函数返回值为x[1], 
    也就是key=x[1]=tuple()[1]=('a', 74)[1],也就是说按照里表中每个项的第二个元素进行排序(第一个是想x[0])
    """

            

  • 相关阅读:
    php冒泡排序
    解决ubuntu下安装phpmyadmin访问不了的问题
    反省
    mysql主从复制
    ubuntu14.04 安装 bcm43142无线网卡
    mysql 批量更新和批量插入
    chromium 安装 pepper flash player
    js prototype新感悟
    读《乌合之众》
    马云---我的世界永不言败
  • 原文地址:https://www.cnblogs.com/zhuminghui/p/9251968.html
Copyright © 2011-2022 走看看