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)
说明:
- 我在dict中选择key的时候,选择的是e['tweet_volume']这样的索引方式,你也可以选择e.get('tweet_volume')或者e.__getitem__('tweet_volume')这样的方式去获取key的值
- 通过使用
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)