2017-12-16 20 views
0

辞書に追加しようとしている場所にこのコードがあります。ループが終了した後、saved_this_monthという辞書形式でさらにsaved_this_monthの合計を出力します。後者の部分では、この場合はtotal_savings変数に関する問題が発生しています。私は1位(金額)のindexの値を引っ張って合計しようとしていると思いますが、明らかに間違っています。Pythonの辞書の集計値

アイデア?ありがとう。

savings_list = [] 

while True: 
    bank = input('Enter the name of the bank:') 
    savings_amount = float(input('Enter the amount saved:')) 

    savings_list.append({ 
     "name": bank, 
     "saved_this_month": savings_amount 
     }) 
    total_savings = sum(savings_list[1]) **this is the prob line I think** 

    cont = input('Want to add another? (Y/N)') 
    if cont == 'N': 
     break; 

print(savings_list) 
print(total_savings) 
+0

代わりに合計 'の(savings_list [1])'それがあるべき'sum(savings_list [bank])' – Stack

+0

@Stackに感謝します。私はそれを試み、それは私に与えられました:リストインデックスは、strではなく整数またはスライスでなければなりません。私はsavings_amountでも試してみました(あなたはそれを意味すると仮定していました)。「.....フロートしない」以外は同じエラーが発生しました。 – JD2775

答えて

2

whileループに変数の外部を使用しないで、なぜあなたがしたいすべての合計は、入力された貯蓄量であれば?

savings_list = [] 
total_savings = 0 # Define out here 

while True: 
    bank = input('Enter the name of the bank:') 
    savings_amount = float(input('Enter the amount saved:')) 

    savings_list.append({ 
     "name": bank, 
     "saved_this_month": savings_amount 
     }) 
    total_savings += savings_amount # just a simple sum 

    cont = input('Want to add another? (Y/N)') 
    if cont == 'N': 
     break; 

print(savings_list) 
print(total_savings) 

、しかし、あなたはsavings_listをロードした後に派手なことや合計を計算したい場合は、sumが処理する方法を知っている何かのリストにdictsのリストを変換する必要があります。

リスト内包をアンロール
total_savings = sum(x["saved_this_month"] for x in savings_list) 

:リスト内包(:より良いか、generator statementEDIT)を試してみてください

a = [] 
for x in savings_list: 
    a.append(x["saved_this_month"]) 
total_savings = sum(a) 
+0

ありがとうございました。説明をありがとうございます – JD2775

+0

あなたはリストの理解を必要としません。ジェネレータが良いでしょう。合計で外側の大括弧を削除するだけです。いい答え。 –

+0

あなたは正しいです。発電機に切り替える。 – PaSTE