zoukankan      html  css  js  c++  java
  • python(46):对字典进行排序,多键值排序

    字典,形如 dic = {'a':1 , 'b':2 , 'c': 3},字典中的元素没有顺序,所以dic[0]是有语法错误的。并且不可以有重复的键值,所以 dic.add['c'] = 4后,字典变成 {'a':1 , 'b':2 , 'c': 4}.

     

    待解决问题

    如何根据需要可以根据“键”或“键值”进行不同顺序的排序?

    函数原型

    sorted(dic,value,reverse)

    • dic为比较函数,value 为排序的对象(这里指键或键值),
    • reverse:注明升序还是降序,True--降序,False--升序(默认)

    案例1

    dic = {'a':3 , 'b':2 , 'c': 1}

        

    注意

    排序之后原字典没有变,顺序依旧

         

    案例2

    >>> a_dic = {'a':{'val':3}, 'b':{'val':4}, 'c':{'val':1}}
    >>> dict= sorted(a_dic.iteritems(), key=lambda d:d[1]['val'], reverse = True)
    >>> dict
    [('b', {'val': 4}), ('a', {'val': 3}), ('c', {'val': 1})]

    例子中“键-值”对中的值是字典,例子对其进行排序。

    那如果“键值”对中值字典的某一特定键不存在,咋处理呢,参考

    >>> a = {'a':{'val':3}, 'b':{'val':4}, 'c':{'val':1}, 'd':{'val2':0}}
    >>> a
    {'a': {'val': 3}, 'c': {'val': 1}, 'b': {'val': 4}, 'd': {'val2': 0}}
    >>> dict= sorted(a.iteritems(), key=lambda d:d[1]['val'], reverse = True)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "<stdin>", line 1, in <lambda>
    KeyError: 'val'
    >>> dict= sorted(a.iteritems(), key=lambda d:d[1].get('val',0), reverse = True)
    >>> dict
    [('b', {'val': 4}), ('a', {'val': 3}), ('c', {'val': 1}), ('d', {'val2': 0})]

    案例3:按照多个键值进行排序

    先按照cpu,然后按照money

    a = {'flavor15': {'cpu': '2', 'memory': 4}, 'flavor14': {'cpu': '2', 'memory': 2}, 'flavor8': {'cpu': '1', 'memory': 1}, 'flavor13': {'cpu': '1', 'memory': 4}, 'flavor12': {'cpu': 2, 'memory': 2}}
    mm = sorted(a.items(),key=lambda item:(int(item[1]["cpu"]), int(item[1]["memory"])),reverse=True)
    sorted:
    [('flavor15', {'cpu': '2', 'memory': 4}), ('flavor14', {'cpu': '2', 'memory': 2}), ('flavor12', {'cpu': 2, 'memory': 2}), ('flavor13', {'cpu': '1', 'memory': 4}), ('flavor8', {'cpu': '1', 'memory': 1})]

    两个函数

    1.lambda

    功能: 创建匿名函数

    区别: 和def函数定义,以下两点区别

    • lambda会创建一个函数对象,但不会把这个函数对象赋给一个标识符;而def则会把函数对象赋值给一个变量
    • lambda它只是一个表达式,而def则是一个语句

    案例:

        

    2.iteritems()

    功能: iteritems()以迭代器对象返回字典键值对

    区别: 和item相比:items以列表形式返回字典键值对

    案例:

        

    注释: 在函数sorted(dic.iteritems(), key = lambda asd:asd[1])中,第一个参数传给第二个参数“键-键值”,第二个参数取出其中的键([0])或键值(1])

  • 相关阅读:
    使用mybatis报错constructor found in com.atguigu.mybatis.bean.Department matching [java.lang.Integer, java.lang.String]
    mybatis报错 Error instantiating interface com.atguigu.mybatis.dao.DepartmentMapper with invalid types () or values ()
    报错Mapped Statements collection does not contain value for com.atguigu.mybatis.dao.EmployeeMapperPlus
    mybatis学习(2)
    resultType没有指定就会报错
    使用Mybatis时报错Cause: java.sql.SQLSyntaxErrorException: ORA-00911: 无效字符
    Oracle操作ORA-02289: 序列不存在
    在数据库中添加数据以后,使用Mybatis进行查询结果为空
    program
    codevs4817 江哥的dp题d
  • 原文地址:https://www.cnblogs.com/lovychen/p/7424015.html
Copyright © 2011-2022 走看看