2013-04-18 70 views
3

我需要將每個鍵的值相乘,然後將所有值相加以打印單個數字。我知道這可能是超級簡單,但我卡住乘以兩個詞典中的值並將其相加

在我心中,我喜歡的東西解決這個問題:

for v in prices: 
total = sum(v * (v in stock)) 
print total 

但這樣的事情是不會工作:)

prices = { 
"banana": 4, 
"apple": 2, 
"orange": 1.5, 
"pear": 3 } 

stock = { 
"banana": 6, 
"apple": 0, 
"orange": 32, 
"pear": 15 } 
+0

重複:HTTP:/ /stackoverflow.com/questions/29189978/computing-shopping-list-total-using-dictionaries/29191277,http://stackoverflow.com/questions/19547281/loop-through-2-dictionaries – smci

回答

7

你可以使用字典理解,如果你想要的人:

>>> {k: prices[k]*stock[k] for k in prices} 
{'orange': 48.0, 'pear': 45, 'banana': 24, 'apple': 0} 

,或者直接轉到總:

>>> sum(prices[k]*stock[k] for k in prices) 
117.0 
+0

假設'stock'具有與「價格」相同的密鑰。也許'stock.get(k,1)'會更合適,但我不確定......如果你只對python3中的重疊感興趣,可以使用'for prices.keys()&stock .keys()'(python2.7它是keysview我認爲) – mgilson

+0

是的,取決於用例。我想也許是股票。get(k,0)',假設默認數字爲零,但至少這樣你會得到一個很好的'KeyError'並且可以從那裏決定。 :^) – DSM

+0

哦,對。 'get(k,0)'比使用1更有意義。畢竟,你無法爲沒有庫存的物品收費。 – mgilson

2

如果你想知道,如何通過詞典使用鍵遍歷,指數字典和領悟的字典,這將是一個直截了當

>>> total = {key: price * stock[key] for key, price in prices.items()} 
>>> total 
{'orange': 48.0, 'pear': 45, 'banana': 24, 'apple': 0} 

即使你的Python的實現不提供解釋的理解(< PY 2.7),你可以把它作爲一個列表理解到dict內置

>>> dict((key, price * stock[key]) for key, price in prices.items()) 
{'orange': 48.0, 'pear': 45, 'banana': 24, 'apple': 0} 

如果你不要;不想2之間兼容.X和3.X你也可以使用iteritems代替 項目

{key: price * stock[key] for key, price in prices.iteritems()} 

如果你想要一個總的結果,可以通過單獨的產品來sum

>>> sum(price * stock[key] for key, price in prices.items()) 
117.0 
0

我猜你在codeacademy?如果是的話只是這樣做:

total = 0 
for key in prices: 
    prices = 53 
    stock = 10.5 
    total = prices + stock 
print total 

不像什麼指示說你將不得不乘以它們,將其添加到總數之前,所有的值加在一起。希望這可以幫助。根據任務描述爲codeacademy

-1
total = 0 
for key in prices: 
    print prices[key] * stock[key] 
    total += prices[key] * stock[key] 
print total 
0

正確答案:

prices = { 
     "banana" : 4, 
     "apple" : 2, 
     "orange" : 1.5, 
     "pear" : 3, 
    } 
    stock = { 
     "banana" : 6, 
     "apple" : 0, 
     "orange" : 32, 
     "pear" : 15, 
    } 

    for key in prices: 
     print key 
     print "price: %s" % prices[key] 
     print "stock: %s" % stock[key] 

    total = 0 
    for key in prices: 
     value = prices[key] * stock[key] 
     print value 
     total = total + value 
    print total 
0

我寫了下面的代碼和它的工作。 用於價格鍵:

print key 
    print "price: %s" % + prices[key] 
    print "stock: %s" % + stock[key] 

在價格鍵: 值=價格[鍵] *股票[鍵] 打印值 總=總+值 打印總

+1

歡迎來到這裏:)最好給你發佈的代碼添加一個解釋,作爲答案,這樣可以幫助訪問者理解爲什麼這是一個很好的答案。 – abarisone