• Python按照list中dict的某个key进行排序


    在做项目的时候,遇到这样的数据:
    
     "trends": [
                   {
                        "name": "Rick Gates",
                        "promoted_content": null,
                        "query": "%22Rick+Gates%22",
                        "tweet_volume": 135732,
                        "url": "http://twitter.com/search?q=%22Rick+Gates%22"
                   },
                   {
                        "name": "#TheBachelorette",
                        "promoted_content": null,
                        "query": "%23TheBachelorette",
                        "tweet_volume": 91245,
                        "url": "http://twitter.com/search?q=%23TheBachelorette"
                   },
                   {
                        "name": "#KremlinAnnex",
                        "promoted_content": null,
                        "query": "%23KremlinAnnex",
                        "tweet_volume": 42654,
                        "url": "http://twitter.com/search?q=%23KremlinAnnex"
                   },
                   {
                        "name": "#LHHH",
                        "promoted_content": null,
                        "query": "%23LHHH",
                        "tweet_volume": 35252,
                        "url": "http://twitter.com/search?q=%23LHHH"
                   }]
    
    我需要做的就是根据tweet_volume的数值对trends里的元素进行排序。
    实现代码:
    把上面数据以字典的方式获取,相当于把取出的就是后面的列表,即
    trends=[
                   {
                        "name": "Rick Gates",
                        "promoted_content": null,
                        "query": "%22Rick+Gates%22",
                        "tweet_volume": 135732,
                        "url": "http://twitter.com/search?q=%22Rick+Gates%22"
                   },
                   {
                        "name": "#TheBachelorette",
                        "promoted_content": null,
                        "query": "%23TheBachelorette",
                        "tweet_volume": 91245,
                        "url": "http://twitter.com/search?q=%23TheBachelorette"
                   },
                   {
                        "name": "#KremlinAnnex",
                        "promoted_content": null,
                        "query": "%23KremlinAnnex",
                        "tweet_volume": 42654,
                        "url": "http://twitter.com/search?q=%23KremlinAnnex"
                   },
                   {
                        "name": "#LHHH",
                        "promoted_content": null,
                        "query": "%23LHHH",
                        "tweet_volume": 35252,
                        "url": "http://twitter.com/search?q=%23LHHH"
                   }]
    
    trends = sorted(trends,key = lambda e:e['tweet_volume'],reverse = True)
    考虑到有些数据是NULL,因此需要提前做个处理,对于空的tweet_volume设置为0,完整代码:
    
    for item in trends:
        if(item.get('tweet_volume') is None):
            item['tweet_volume'] = 0
        trends = sorted(trends,key = lambda e:.get('tweet_volume') ,reverse = True)
    
    
    建议用get方式获取,空值或数据不存在这样不会报错。
    在Python文档中看到一种性能更高的方法
    
    通过使用 operator 模块的 itemgetter 函数,可以非常容易的排序这样的数据结构
    
    因此上面的程序可以改写成
    
    
    from operator import itemgetter
    for item in trends:
        if(item.get('tweet_volume') is None):
            item['tweet_volume'] = 0
    trends = sorted(trends,key = itemgetter('tweet_volume'),reverse = True)

    本文参考地址:

    https://blog.csdn.net/qq_29303759/article/details/81902810
  • 相关阅读:
    深入理解JVM 运行时数据区域
    深入理解JVM 垃圾收集
    深入理解JVM 垃圾收集算法
    深入理解JVM HotSpot 虚拟机对象
    公司格式
    出现 Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation 问题
    vuex 中关于 mapActions 的作用
    vuerouter 路由传递参数的三种写法
    Android WebView禁用系统键盘
    直播CDN介绍
  • 原文地址:https://www.cnblogs.com/liangliangzz/p/12625934.html
Copyright © 2020-2023  润新知