Python-如何为字典中的值设置最大数量?

时间:2013-09-07 17:25:14

标签: python dictionary

这是我的词典:

Health = {'John' : 100}

我想要做的是,我想设置一个值可以为100的最大数量。 所以,如果我输入:

Health['John'] += 10
print Health

当打印时,我希望'John'的值为100,因为该值的最大值可以是100.如果代码是:

Health = {'John' : 90}

Health['John'] += 12
print Health

我希望这打印'John':100,因为最大值是100.得到它? 感谢

4 个答案:

答案 0 :(得分:6)

您可以创建自己的dict子类:

class Mydict(dict):
    def __setitem__(self, key, val):
        super(Mydict, self).__setitem__(key, min(val, 100))
...         
>>> d = Mydict({'john': 100})
>>> d['john'] += 12
>>> d
{'john': 100}
>>> d['foo'] = 90
>>> d
{'john': 100, 'foo': 90}
>>> d['foo'] += 12
>>> d
{'john': 100, 'foo': 100}

答案 1 :(得分:4)

您可以为此创建一个特殊的dict

class CappedDict(dict):
  def __init__(self, cap):
    self.cap = cap
  def __setitem__(self, key, value):
    dict.__setitem__(self, key, min(value, self.cap))

d = CappedDict(100)
print d
d['Harry'] = 90
print d
d['Harry'] += 20
print d

答案 2 :(得分:2)

除非您继承dict,否则不能只使用字典。通过使用函数实现逻辑,我将获得相同的功能:

这些内容:

def add_to_health_with_max(dict,key,value,max_value):
    added = value + dict[key]
    if added > max_value:
        age = max_value
    else:
        age = added
    dict[key] = age
    return age

现在

health = {'John' : 60}
print add_to_dict(health,'John',12,100)
print add_to_dict(health,'John',120,100)
print health

返回:

72
100
{'John': 100}

现在你仍然使用普通的旧词。

可以制作你自己的类,通过覆盖__setitem____getattr__或两者来实现你所描述的行为(Ashwini Chaudhary详细介绍了你如何做得很好),但我怀疑这将是矫枉过正并削弱可修复性。

是否继承dict或使用函数

问一个最好的事情是什么是一个合理的问题 - 这种方法(编写一个函数以特定的方式添加到你的dicts)或子类化dict给你一个具有你想要的特定行为的对象。

在您的应用程序的上下文之外很难回答这个问题,对于一个小型应用程序,如果您需要在许多不同的地方使用此功能并希望通过,那么我将使用上述方法围绕所建议的OOP方法的这些决定可能更有用。

答案 3 :(得分:0)

这是一种非常简单的方法:

def value(h):
if h > 100:
    return 100
return h

我将最大值设置为100.如果数字为150,则返回100。