0

我是 Python 的新手,但可以执行以下操作吗?我想创建一个字典,test_tube,它显示里面有什么液体和它的数量。使用 add_liquid 函数,我想在试管中添加一种新液体或更多以前使用过的液体,而不使用 defaultdicts。

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

4 回答 4

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

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

于 2012-11-20T00:09:57.343 回答
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)

等等

于 2012-11-20T00:10:06.883 回答
1

你会想要这样的东西:

if liquid not in test_tube.keys():
    test_tube.update({liquid:milliliters})
else:
    test_tube[liquid] += milliliters
于 2012-11-20T00:10:51.897 回答
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})
>>>
于 2012-11-20T01:40:01.433 回答