这是我的词典:
Health = {'John' : 100}
我想要做的是,我想设置一个值可以为100的最大数量。 所以,如果我输入:
Health['John'] += 10
print Health
当打印时,我希望'John'的值为100,因为该值的最大值可以是100.如果代码是:
Health = {'John' : 90}
Health['John'] += 12
print Health
我希望这打印'John':100,因为最大值是100.得到它? 感谢
答案 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详细介绍了你如何做得很好),但我怀疑这将是矫枉过正并削弱可修复性。
问一个最好的事情是什么是一个合理的问题 - 这种方法(编写一个函数以特定的方式添加到你的dicts)或子类化dict给你一个具有你想要的特定行为的对象。
在您的应用程序的上下文之外很难回答这个问题,对于一个小型应用程序,如果您需要在许多不同的地方使用此功能并希望通过,那么我将使用上述方法围绕所建议的OOP方法的这些决定可能更有用。
答案 3 :(得分:0)
这是一种非常简单的方法:
def value(h):
if h > 100:
return 100
return h
我将最大值设置为100.如果数字为150,则返回100。