【问题标题】:memorize a value of a dictionary记住字典的值
【发布时间】:2012-11-20 00:03:28
【问题描述】:

我是 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之前的值是多少?或者之前添加了哪种液体?
  • 出于好奇,您为什么不想使用defaultdict?实现自己的defaultdict-like 类是否合理?
  • 如果你不喜欢 defaultdict,你可以使用from collections import Counter 如果你所做的只是在做计数。

标签: python function dictionary add updates


【解决方案1】:

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

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

另一种表述方式是将该值设置为当前值的总和,或者没有和毫升的0:

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

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

【讨论】:

  • @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)

等等

【讨论】:

  • 我认为你应该使用setdefault(liquid, 0) 而不是get(liquid, 0);设置一个键,返回它的值然后再次设置它是没有意义的。
【解决方案3】:

你会想要这样的东西:

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

【讨论】:

  • 不需要keys()update({})liquid in test_tube 已经检查了键,test_tube[liquid] = milliliters 是添加新键和值的更清晰的方法。
【解决方案4】:

如果您只进行计数,并且不喜欢 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-05-13
    • 2016-03-04
    • 2021-05-11
    • 2011-05-26
    • 2011-07-28
    • 2012-07-10
    • 1970-01-01
    • 2012-07-13
    • 2011-04-23
    相关资源
    最近更新 更多