1

我需要帮助计算每个字典日期值的百分比。

raw_data = [{'name':'AB', 'date':datetime.date(2012, 10, 2), 'price': 23.80}, {'name':'AB', 'date':datetime.date(2012, 10, 3), 'price': 23.72}]

我已经使用集合将上面的字典格式化为下面的格式。

import collections
res = collections.defaultdict(dict)

for row in raw_data:
  row_col = res[row['name']]
  row_col[row['date']] = row['price']


  {'AB': {datetime.date(2012, 10, 2): 23.80,
  datetime.date(2012, 10, 3): 23.72,
  datetime.date(2012, 10, 4): 25.90,
  datetime.date(2012, 10, 5): 29.95}

现在我需要将上述数据计算为以下格式。

计算公式:

最后价格将分红所有最高值

   Date                               Price   Percentage 
   datetime.date(2012, 10, 5)         29.95      26%     
   datetime.date(2012, 10, 4)         25.90      9%        
   datetime.date(2012, 10, 3)         23.72      0%      
   datetime.date(2012, 10, 2)         23.80      0       

计算是这样的

(23.72/23.80-1) * 100 = 0% 
(25.90/23.80-1) * 100 = 9% 
(29.95/23.80-1) * 100 = 26%

任何帮助都非常感谢。

4

2 回答 2

1

您可以使用类似的内容获取字典中所有值的列表value_list = res.values()。这将是可迭代的,您可以使用 for 循环和列表切片来获取价格值。value_list[0]然后将包含您将所有内容除以的最低价格。然后根据您计划对数据执行的操作,您可以使用 for 循环来计算所有百分比或将其包装在一个函数中并根据需要运行它。

参考:Python:索引字典?

于 2013-04-12T05:11:58.890 回答
0
import datetime
import collections

raw_data = [
{'name':'AB', 'date':datetime.date(2012, 10, 2), 'price': 23.80}, 
{'name':'AB', 'date':datetime.date(2012, 10, 3), 'price': 23.72},
{'name':'AB', 'date':datetime.date(2012, 10, 4), 'price': 25.90},
{'name':'AB', 'date':datetime.date(2012, 10, 5), 'price': 29.95}
]

#all unique names in raw_data
names = set(row["name"] for row in raw_data)
#lowest prices, keyed by name
lowestPrices = {name: min(row["price"] for row in raw_data) for name in names}

for row in raw_data:
    name = row["name"]
    lowestPrice = lowestPrices[name]
    price = row["price"]
    percentage = ((price/lowestPrice)-1)*100
    row["percentage"] = percentage

print raw_data

输出(我添加的换行符):

[
{'date': datetime.date(2012, 10, 5), 'price': 29.95, 'percentage': 26.264755480607093, 'name': 'AB'},
{'date': datetime.date(2012, 10, 4), 'price': 25.9, 'percentage': 9.190556492411472, 'name': 'AB'}, 
{'date': datetime.date(2012, 10, 2), 'price': 23.8, 'percentage': 0.337268128161905, 'name': 'AB'}, 
{'date': datetime.date(2012, 10, 3), 'price': 23.72, 'percentage': 0, 'name': 'AB'} 
]
于 2013-04-12T12:40:41.807 回答