3

辞書に株価のリストとその値のリストがあります。リストを調べて毎日の株式の値を取得したいのですが、変数を使用してデータにアクセスしているときに、リスト内の場所を解決するのに問題があります。

次に例を示します。

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]

g(私の場合はそれを実行します)を返しますが、Pythonが文字列として提供しているものを認識せず、代わりにリストへの参照を表示する方法はありますか?

4

6 に答える 6

11

代わりに、現在のリストを辞書として保存してみませんか?

それ以外の:

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

使用する:

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

これで、次を使用してそれらを取得できます。

stock_vals[stock_name][day_index]

ここで、stock_nameはの要素で{'goog', 'msft', ...}あり、day_indexはの要素です[0, 6]

于 2012-07-20T19:42:56.280 に答える
5

日ごとの値を辞書に移動します。

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

そして、そのようにそれらを調べます:

stock_values[ stock ][ days ]
于 2012-07-20T19:42:57.407 に答える
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

これにより、stockPythonの組み込み関数を介して、特定の文字列値の文字列名を同じ名前の現在の変数の値に変換することで、処理が機能しeval()ます。この関数は、Pythonインタープリターと同じ方法で文字列引数で渡された式を評価し、結果の値を返します。この場合、式は単に変数の名前であるため、または変数stock_pricesの値の別の名前になります。googmsft

これを行うためのもう少し良い方法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]を代わりに使用することもできますが、理解しにくい場合があります。

于 2012-07-20T21:26:43.633 に答える
2

文字列を既存の変数名に変換します。これは可能ですが、お勧めしません。キーが文字列で値がリストである辞書にgoogとmsftを保存することをお勧めします。

于 2012-07-20T19:43:00.053 に答える
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()と言っているようなものです)、この場合、文字列「 goog 」と文字列「msft」(そこに含まれる値ではありません)を取得します。ひもを歩き直します。xfor x in {}for x in {}.keys()

あなたは多かれ少なかれこれをやっています:

>>> 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つです...

大きな力には大きな責任が伴います

:-)

于 2012-07-20T20:05:06.220 に答える
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]
于 2012-07-20T19:43:07.327 に答える