网络编程
位置:首页>> 网络编程>> Python编程>> Python按照list dict key进行排序过程解析

Python按照list dict key进行排序过程解析

作者:青春叛逆者  发布时间:2023-12-06 08:19:06 

标签: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://www.cnblogs.com/liangliangzz/p/12625934.html

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com