记住字典的值

时间:2012-11-20 00:03:28

标签: python function dictionary add updates

我是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中先前的液体量。 任何意见,将不胜感激!

4 个答案:

答案 0 :(得分:5)

如果我正确理解您的问题,您只需要检查液体是否已经存在,如果是,请添加金额。

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

另一种表达方法是将值设置为当前值的总和,或者将0设置为no,并且毫升:

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

请注意,您需要定义您的函数,以便它修改您传入的字典(然后您不应该真正返回任何内容),或者它返回它的修改后的副本。

答案 1 :(得分: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 :(得分:1)

你会想要这样的东西:

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

答案 3 :(得分: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})
>>>