这是我的字典:
Health = {'John' : 100}
我想要做的是,我想将一个值的最大数量设置为 100。所以,如果我输入:
Health['John'] += 10
print Health
打印时,我希望“John”的值为 100,因为该值可以是 100。如果代码是:
Health = {'John' : 90}
Health['John'] += 12
print Health
我希望它打印 'John' : 100,因为最大值是 100。明白吗?谢谢
这是我的字典:
Health = {'John' : 100}
我想要做的是,我想将一个值的最大数量设置为 100。所以,如果我输入:
Health['John'] += 10
print Health
打印时,我希望“John”的值为 100,因为该值可以是 100。如果代码是:
Health = {'John' : 90}
Health['John'] += 12
print Health
我希望它打印 'John' : 100,因为最大值是 100。明白吗?谢谢
您可以创建自己的 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}
您可以为此创建一个特殊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
除非您将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 方法可能更有用。
这是一个非常简单的方法:
def value(h):
if h > 100:
return 100
return h
我将最大值设置为 100。如果数字是 150,它将返回 100。