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

1、list of dict数据结构说明:

 "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"
               }]

2、排序目标:

根据tweet_volume的数值对trends里的元素进行排序。

3、实现代码:

以下4种方式都可以,第4中性能更好

1)trends = sorted(trends,key = lambda e:e['tweet_volume'],reverse = True)
2)trends = sorted(trends,key = lambda e:e.get('tweet_volume'),reverse = True))
3)trends = sorted(trends,key = lambda e:e.__getitem__('tweet_volume'),reverse = True))
4)trends = sorted(trends,key = itemgetter('tweet_volume'),reverse = True)

说明:

  1. 我在dict中选择key的时候,选择的是e['tweet_volume']这样的索引方式,你也可以选择e.get('tweet_volume')或者e.__getitem__('tweet_volume')这样的方式去获取key的值
  2. 通过使用 operator 模块的 itemgetter 函数,可以非常容易的排序这样的数据结构,使用时需要from operator import itemgetter

4、sotred()函数原型:

sorted(iterable[,key][,reverse])

iterable:需要排序的变量(必填)

key:指定排序的元素

reverse:指定是否逆序,默认为false

具体可参考上篇文章:Dist类系列(一):根据字典的key值、value值进行排序

5、lambda:匿名函数,一般形式为

lambda arguments: expression

6、考虑到有些数据是NULL,因此需要提前做个处理:

对于空的tweet_volume设置为0,完整代码:

for item in trends:

    if(item['tweet_volume'] is None):

    item['tweet_volume'] = 0

trends = sorted(trends,key = lambda e:e['tweet_volume'],reverse = True)

猜你喜欢

转载自blog.csdn.net/sanmi8276/article/details/108639247