2012-11-20 70 views
0

我在Python中是一個新手但有可能做到以下幾點? 我想創建一個字典test_tube,它顯示了液體的含量和數量。使用add_liquid功能,我想添加一種新液體或更多以前使用的液體到試管中,而不使用缺省值。記住字典的值

Def add_liquid(test_tube,liquid,milliliters=0): 
    test_tube[liquid] = milliters 
    return test_tube 
    #update of previous test tube and memorize new test tube   

>>>add_liquid(test_tube,'water',10) 
{'water':10} 
>>>more_water=add_liquid(test_tube,'water',5) 
>>>more_water 
{'water':15} 
>>>add_liquid(test_tube,'ethanol',1) 
{'ethanol':1, 'water':15} 

Python必須以某種方式記住test_tube中以前的液體量。 任何意見將不勝感激!

+2

你的意思是說你想能夠知道'test_tube'的前一個值是什麼?或之前添加了哪種液體? – Hotchips

+0

以前的值 – user1830011

+0

出於好奇,爲什麼你不想使用'defaultdict'?實施你自己的'defaultdict'類課程是否合理? – abarnert

回答

5

如果我正確理解你的問題,你只需要檢查液體是否已經在那裏,如果是的話,添加金額。

if liquid in test_tube: 
    test_tube[liquid] += milliliters 
else: 
    test_tube[liquid] = milliliters 

另一種方式來制定,這是將值設置爲當前值的總和或沒有0,並且毫升:你需要或者定義功能

test_tube[liquid] = test_tube.get(liquid, 0) + milliliters 

注以便它修改你傳入的字典(然後你不應該真的返回任何東西),或者它返回它的修改副本。

+0

謝謝!我現在明白了。 – user1830011

+0

@ user1830011如果您滿意,請點擊左側接受答案。 :) –

2

您想將test_tube存儲爲您傳遞給add_liquid()的變量。此外,如果它已經存在,您希望它添加到液體值。

def add_liquid(test_tube,liquid,milliliters=0): 
    test_tube[liquid] = test_tube.setdefault(liquid, 0) + milliters 
    return test_tube 

test_tube = add_liquid(test_tube,'water',10) 
more_water = add_liquid(test_tube,'water',5) 

+2

我認爲,而不是'setdefault(液體,0)'你應該使用'get(liquid,0)';設置一個鍵,返回它的值然後重新設置是沒有意義的。 –

1

你會想是這樣的:

if liquid not in test_tube.keys(): 
    test_tube.update({liquid:milliliters}) 
else: 
    test_tube[liquid] += milliliters 
+2

不需要'keys()'或'update({})'。 「test_tube中的液體」已經檢查了按鍵,「test_tube [liquid] = milliliters」是添加新鍵和值的更清晰的方法。 – Blckknght

0

如果你只是做計數,而你不喜歡defaultdict(),您可以使用從館藏Counter()對象:

>>> from collections import Counter 
>>> test_tube = Counter() 
>>> test_tube["water"] = 10 
>>> 
>>> # more water 
>>> test_tube["water"] += 5 
>>> test_tube["water"] 
15 
>>> test_tube["ethanol"] = 1 
>>> test_tube 
Counter({'water': 15, 'ethanol': 1}) 
>>>