2013-04-12 134 views
1

我需要幫助計算字典日期值的百分比的每個字典。基於python字典計算百分比

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% 

任何幫助真的很感激。

+0

@Patashu '你嘗試過什麼' 的問題已被禁止 – jamylak

+0

@Patashu HTTP://meta.stackexchange .com/a/172760/182887 – dusan

回答

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'} 
] 
+0

如果字典有兩個不同的名字,它應該從相同的名字找到一個限制。類似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':'CD','date':datetime.date(2012,10,4),'price':25.90}, {'name':'CD','date':datetime.date(2012,10,5),'price':29.95} ] – newbe

1

您可以像value_list = res.values()那樣獲取字典中所有值的列表。這將是可迭代的,您可以使用for循環和列表切片來獲取價格值。然後value_list[0]將包含您將所有東西劃分的最低價格。然後根據您計劃對數據執行的操作,可以使用for循環來計算所有百分比或將其包裝在函數中並根據需要運行。

參考:Python: Index a Dictionary?