2012-07-20 54 views
4

我有一个字典中的股票价格列表和它们的值列表。我想通过列表获取每日股票的价值,但在使用变量访问数据时,我无法解析列表中的位置。我可以使用变量字符串来引用列表吗?

这里有一个例子:

goog = [12,132,124,234,234] 
msft = [432,23,234,54,23] 

num_days = 5 
stocks_i_own = {'goog':50, 'msft':50} 

for days in range(0,num_days): 
    for stock in stocks_i_own: 
     print days, stock, stocks_i_own[stock] 
     print stock[days] #prints just 'g' not the value on day0 
     print 'vaue on ', days, ' is ', stock[days] * stocks_i_own[stock] 

问题是,当我使用stock[days]来获取数据。我知道股票具有正确的价值('goog'或'msft'),天有正确的值(范围为0-4),但是当它们一起使用时,我不会从列表中获取数据,而是从在这个词本身。这是有道理的,因为这样的:

name = 'google' 
name[0] 

将返回克(其中它在我的情况下做的),但有一个用于Python的方式不是看什么,我提供的是一个字符串,而是给一个参考清单?

+10

这可能是把这些名单在字典中是一个好主意。它也可以解决你的问题。 – 2012-07-20 19:39:47

+0

@arxanas张贴作为一个答案 – 2012-07-20 19:41:19

+0

好吧,我给它一个shot..thanks .. @arxanas我会对其进行测试,但如果你希望把这个作为一个答案时,我得到它的工作我会接受。 – Lostsoul 2012-07-20 19:43:28

回答

11

为什么不将当前列表作为字典存储?

相反的:

goog = [12, 132, 124, 234, 234] 
msft = [432, 23, 234, 54, 23] 

用途:

stock_vals[stock_name][day_index] 

其中stock_name是{'goog', 'msft', ...}和day_index一个元素是一个元素 :

stock_vals = { 'goog': [12, 132, 124, 234, 234], 'msft': [432, 23, 234, 54, 23] } 

现在你可以使用检索它们[0, 6]

5

移动一天按一天值到字典:

stock_values = { 'goog': [12,132,124,234,234], 
       'msft': [432,23,234,54,23] } 

再看看他们,就像这样:

stock_values[ stock ][ days ] 
1

其实Stocks_i_own是一本字典

用途:

for days in range(0,num_days): 
    for stock, value in stocks_i_own.items(): 
     print days, stock, value 
     print value[days] #prints just 'g' not the value on day0 
     print 'vaue on ', days, ' is ', stock[days] * stocks_i_own[stock] 
+0

现在你会得到关于'值[天]例外' - 'value'是与蟒蛇蜘蛛侠整数 – Izkata 2012-07-20 21:42:51

2

只是为了好奇:

#!/usr/bin/env python 
goog = [12,132,124,234,234] 
msft = [432,23,234,54,23] 

num_days = 5 
stocks_i_own = {'goog':50, 'msft':50} 

for days in range(0,num_days): 
    for stock_name in stocks_i_own: #simmilar stocks_i_own.keys() 
    globals_bak = globals() 
    for var_name, var_value in globals_bak.items(): 
     if var_name == stock_name: 
      studied_stock = var_value 
       print days, stock_name, studied_stock 
       print studied_stock[days] #prints just 'g' not the value on day0 
       print 'vaue on ', days, ' is ', studied_stock[days] * stocks_i_own[stock_name] 

我相信这会做你想要什么,但我肯定会把它们在字典中!。(我只是发布这个例子,你可以用Python做什么,这并不意味着你应该这样做)

内置函数globals()返回一个字典,其中包含当前模块中定义的全局值(检查出来:globals

此外,还有在部分问题,说:

for stock in stocks_i_own: 
    #[...] 
    print stock[days] #prints just 'g' not the value on day0 

是因为当你走一本字典为for x in dict()x得到键的值(for x in {}像说for x in {}.keys())等等你的情况,你得到的字符串“goog”和字符串“MSFT”(不包含值有)和你走的字符串。

你这样做或多或少这样的:

>>> a="goog" 
>>> for i in range(0,5): 
...  print a[i] 
... 
g 
o 
o 
g 
Traceback (most recent call last): 
    File "<stdin>", line 2, in <module> 
IndexError: string index out of range 

Pyhton是语言,你一定要听叔叔奔的一个...

随着大国意味着巨大的责任

:-)

+1

+1 .. + 2,如果你能以某种方式为黑暗骑士做得一样好.. – Lostsoul 2012-07-20 22:59:54

2

您遇到的问题是因为您使用的是股票的名称既作为字符串的值并作为脚本变量的名称。有许多与做的事情的方式(其他)问题,但这里有一个简单的解决办法:

goog = [12,132,124,234,234] 
msft = [432,23,234,54,23] 

num_days = 5 
stocks_i_own = {'goog':50, 'msft':50} 

for day in range(num_days): 
    for stock in stocks_i_own: 
     print day, stock, stocks_i_own[stock] 
     stock_prices = eval(stock) # get list of prices with this stock's name 
     print stock_prices[day] 
     print 'value on ', day, ' is ', stock_prices[day] * stocks_i_own[stock] 
     print 

这使得事情通过转换给定stock字符串值的字符串名称转换成电流变量的值工作通过Python的内置函数eval()来实现同名。这个函数用Python解释器的方式评估它在字符串参数中传递的表达式,并返回结果值。在这种情况下,表达式仅仅是一个变量的名字,所以stock_prices只是成为另一个名称为goog的任一值或msft变量。

稍微好一点的方法是创建另一个类似于stocks_i_own的字典,其中包含每个相应命名股票的每日价格列表。这样,您将能够使用同一个关键字(即stock变量中保存的股票的字符串名称)对每个关键字进行索引,以检索相应的数据。以下是我的建议:

num_days = 5 
stocks_i_own = {'goog':50, 'msft':50} 
stock_prices = {'goog': [12,132,124,234,234], 
       'msft': [432,23,234,54,23]} 

for day in range(num_days): 
    for stock in stocks_i_own: 
     print day, stock, stocks_i_own[stock] 
     daily_prices = stock_prices[stock] 
     print daily_prices[day] 
     print 'value on ', day, ' is ', daily_prices[day] * stocks_i_own[stock] 
     print 

而是具有独立daily_prices可变的,较长的表达stock_prices[stock][day]可以用来代替,但可能不会像理解的。

相关问题