Python按照list dict key进行排序过程解析
在做项目的时候,遇到这样的数据:
"trends":[
{
"name":"RickGates",
"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":"RickGates",
"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=lambdae:e['tweet_volume'],reverse=True)
考虑到有些数据是NULL,因此需要提前做个处理,对于空的tweet_volume设置为0,完整代码:
foritemintrends:
if(item.get('tweet_volume')isNone):
item['tweet_volume']=0
trends=sorted(trends,key=lambdae:.get('tweet_volume'),reverse=True)
建议用get方式获取,空值或数据不存在这样不会报错。
在Python文档中看到一种性能更高的方法
通过使用operator模块的itemgetter函数,可以非常容易的排序这样的数据结构
因此上面的程序可以改写成
fromoperatorimportitemgetter
foritemintrends:
if(item.get('tweet_volume')isNone):
item['tweet_volume']=0
trends=sorted(trends,key=itemgetter('tweet_volume'),reverse=True)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。