![]() |
Passing Values of Dictionaries to Function & Unable to Access Them - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: Passing Values of Dictionaries to Function & Unable to Access Them (/thread-20285.html) |
Passing Values of Dictionaries to Function & Unable to Access Them - firebird - Aug-03-2019 Hello Everyone! I need your help with the following problem. I have a list of dictionaries and try to access the value of each dictionary in the list that are then passed to a function, e.i. ExpMovingAverage, which in turn is supposed to return the calculated value (based on the function formula) and will associate that returned value with its corresponding key. For example, for AAPL would get its current and open prices and stores them in val, thus if ExpMovingAverage(val, 3)= 1.245.. then result should be{'AAPL',1.245..} and do the same for other dictionaries in my list. This is the error message i get: This is my scrip:stocks = ['AAPL', 'MSFT', 'TSLA'] def stockdata(): yahoo_financials = YahooFinancials(stocks) price = yahoo_financials.get_current_price() Open = yahoo_financials.get_open_price() return price, Open get_curprices = lambda:stockdata()[0] #getting dataset of current prices into a dictionary dict_curprices = {} dict_curprices.update(get_curprices()) get_openprices = lambda:stockdata()[1] #getting dataset of open prices into a dictionary dict_openprices = {} dict_openprices.update(get_openprices()) def ExpMovingAverage(values, window): dataList = [] #attempting to access only the value part of each above dictionary, e.g. get_curprices, get_openprices,... dataList = [get_curprices, get_openprices] for dic in dataList: for val in dic.values(): weights = np.exp(np.linspace(-1., 0., window)) weights /= weights.sum() a = np.convolve(values, weights, mode='full')[:len(values)] a[:window] = a[window] return a if __name__ == "__main__": ema_val = ExpMovingAverage(val, 3) print(ema_val, dic.key()) RE: Passing Values of Dictionaries to Function & Unable to Access Them - Yoriz - Aug-03-2019 In the line ema_val = ExpMovingAverage(val, 3) val has not been defined.you need to define it before using it val = # set it as something usefull RE: Passing Values of Dictionaries to Function & Unable to Access Them - firebird - Aug-03-2019 Hi Yoriz, thank you for the reply and help. I tried some reworking the script in the hope of making changes based on your suggestion (i hope i did). I am getting the following error message in the reworked version i removed the linesget_curprices = lambda:stockdata()[0] #getting dataset of current prices into a dictionary dict_curprices = {} dict_curprices.update(get_curprices()) get_openprices = lambda:stockdata()[1] #getting dataset of open prices into a dictionary dict_openprices = {} dict_openprices.update(get_openprices())as it seems they won't affect the result i'm after This is the new version: import numpy as np import pandas as pd from yahoofinancials import YahooFinancials stocks = ['AAPL', 'MSFT', 'TSLA'] def stockdata(): yahoo_financials = YahooFinancials(stocks) price = yahoo_financials.get_current_price() Open = yahoo_financials.get_open_price() return price, Open def ExpMovingAverage(values, window): weights = np.exp(np.linspace(-1., 0., window)) weights /= weights.sum() a = np.convolve(values, weights, mode='full')[:len(values)] a[:window] = a[window] return a if __name__ == "__main__": dF = pd.DataFrame(stockdata()) data = dict(dF) for val in data.keys(): ema_val = ExpMovingAverage(val, 3) print(ema_val, key) RE: Passing Values of Dictionaries to Function & Unable to Access Them - firebird - Aug-03-2019 Hi Yoriz, thank you for the help as it led me to review and see what was wrong. Just for anyone to see the final solution, this is the full working script: import numpy as np import pandas as pd from yahoofinancials import YahooFinancials stocks = ['AAPL', 'MSFT', 'TSLA'] def stockdata(): yahoo_financials = YahooFinancials(stocks) price = yahoo_financials.get_current_price() Open = yahoo_financials.get_open_price() return price, Open def ExpMovingAverage(values, window): weights = np.exp(np.linspace(-1., 0., window)) weights /= weights.sum() a = np.convolve(values, weights, mode='full')[:len(values)] a[:window] = a[window] return a if __name__ == "__main__": price = get_curprice() dF = pd.DataFrame(stockdata()) data = dict(dF) for index, val in data.items(): ema_val = ExpMovingAverage(val, 1) print("Exp. moving average based on open and current price is ", ema_val[-1:], index)The output, as expected, is: Exp. moving average based on open and current price is [205.53] AAPL Exp. moving average based on open and current price is [138.09] MSFT Exp. moving average based on open and current price is [231.35] TSLA It is important to note that in weights = np.exp(np.linspace(-1., 0., window))'window' refers to the number of data points to be averaged, in my example i'm using the 'open' and 'current' prices hence i use 'window = 1' since the index starts at 0. Not taking this into account will result in a thrown error such as
|