python 3:如何通过新变量在不添加新键和值的情况下重新排列列表中的字典

问题描述 投票:-1回答:1

我想用新变量重新排列字典,而新变量是用现有变量新定义的。例如,

security_info = [{'date': '19.04.15', 'price': 785000, 'trade': 79620},
                 {'date': '19.04.16', 'price': 785000, 'trade': 68203},
                 {'date': '19.04.17', 'price': 754000, 'trade': 165929},
                 {'date': '19.04.18', 'price': 779000, 'trade': 94462},
                 {'date': '19.04.19', 'price': 770000, 'trade': 76814},
                 {'date': '19.04.22', 'price': 774000, 'trade': 58079},
                 {'date': '19.04.23', 'price': 775000, 'trade': 79128},
                 {'date': '19.04.24', 'price': 771000, 'trade': 61650},
                 {'date': '19.04.25', 'price': 757000, 'trade': 111805},
                 {'date': '19.04.26', 'price': 764000, 'trade': 68237}]

我想通过“净回报”重新排列此列表,“净回报”由“今天的价格/昨天的价格* 100”(当然不存在首个日期的“净回报”)。但是我不想通过添加新的键和值来解决此问题。

谢谢。

python python-3.x
1个回答
0
投票

我应该通过发表一些评论作为开头:

  1. 对于这些数据,这不是一个很好的结构。我建议研究pandas,它可以处理日期,并且在这种情况下效果很好。
  2. 为净回报率设置新值可能是一个好主意,因为这是您用来对值进行排序的依据。

但是,如果您想基于净收益对值进行排序,并且列表当前按日期排序(如您的示例中所示,那么类似的方法可能会起作用:

def net_return(entry): 
     i = security_info.index(entry) 
     if i>0: 
         return security_info[i]['price']/security_info[i-1]['price'] 
     else: 
         return -1 

sorted(security_info, key=net_return)

这将返回以下列表:

[{'date': '19.04.15', 'price': 785000, 'trade': 79620},
 {'date': '19.04.17', 'price': 754000, 'trade': 165929},
 {'date': '19.04.25', 'price': 757000, 'trade': 111805},
 {'date': '19.04.19', 'price': 770000, 'trade': 76814},
 {'date': '19.04.24', 'price': 771000, 'trade': 61650},
 {'date': '19.04.16', 'price': 785000, 'trade': 68203},
 {'date': '19.04.23', 'price': 775000, 'trade': 79128},
 {'date': '19.04.22', 'price': 774000, 'trade': 58079},
 {'date': '19.04.26', 'price': 764000, 'trade': 68237},
 {'date': '19.04.18', 'price': 779000, 'trade': 94462}]

希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.