valid = {'Temp': [10, 55], 'rain_percent': [49, 100], 'humidity': [30,50]}
data = {'Temp': 30.45, 'rain_percent': 80.56 }
min_temp , max_temp = valid['Temp']
if not(min_temp <= data['Temp'] <= max_temp):
print "Bad Temp"
min_rain , max_rain = valid['rain_percent']
if not(min_rain <= data['rain_percent'] <= max_rain):
print "It's not going to rain"
这就是我对我所拥有的两个词典所做的事情。我知道这个检查可以进一步修改。由于两个字典valid
和data
具有相同的keys
,因此必须有更好的方法来实现此检查。任何人都可以帮助我吗?
非常感谢。
答案 0 :(得分:1)
如果我理解正确,您可以尝试检查每个值data[k]
是否在2元素列表/元组valid[k]
定义的范围内。
尝试使用for
循环和dict.items()
来迭代data
并将每个值与valid
中的相应范围进行比较:
valid = {'Temp': [10, 55], 'rain_percent': [49, 100], 'humidity': [30,50]}
data = {'Temp': 30.45, 'rain_percent': 80.56, 'humidity': 70 }
for key,val in data.items():
min, max = valid[key]
if not( min <= val <= max ):
print "%s=%g is out of valid range (%g-%g)" % (key, val, min, max)
else:
print "%s=%g is in the valid range (%g-%g)" % (key, val, min, max)
对于我给出的示例data
值,它将打印出来:
rain_percent=80.56 is in the valid range (49-100)
Temp=30.45 is in the valid range (10-55)
humidity=70 is out of valid range (30-50)
答案 1 :(得分:1)
这个答案是建立在@ Dan的基础上的。
您可能希望将其他参数添加到“有效”状态。 avg,标准偏差等字典以及更多数据点,如air_pressure,wind_speed,visibility等。
特别是在你有更多数据点(温度,湿度等)和更多参数和标签(min,max,&#39)的情况下;高温,低温,等等,你会希望你的有效&#39;字典更具描述性。然后,您可以编写更灵活,更具描述性的一般功能,具体取决于您的有效&#39;的深度。字典。
这是一个例子。我们现在打电话给“有效的”&#39;字典&#39;参数。&#39;
parameters = {
'temp': {
'min':10,
'max':55,
'avg':40,
'stddev':10,
'in_range_label':"Good Temp",
'out_range_label':"Bad Temp",
'above_average_label':"Above average temp",
'below_average_label':"Below average temp",
},
'rain_percent': {
'min':49,
'max':100,
'avg':75,
'in_range_label':"Going to rain",
'out_range_label':"Not going to rain",
'above_average_label':"Above average rain",
'below_average_label':"Below average rain",
},
'humidity': {
'min':30,
'max':50,
'avg':45,
'in_range_label':"Humid",
'out_range_label':"Not humid" ,
'above_average_label':"Above average hemp",
'below_average_label':"Below average humidity",
}
}
data = {'temp': 30.45, 'rain_percent': 80.56 }
def check_min_max(data, parameters):
for k, v in data.items():
min = parameters[k]['min']
max = parameters[k]['max']
if min <= v <= max:
print '{}={}, {}'.format(k, v, parameters[k]['in_range_label'])
else:
print '{}={}, {}'.format(k, v, parameters[k]['out_range_label'])
def check_avg(data, parameters):
for k, v in data.items():
avg = parameters[k]['avg']
if v > avg:
print '{}={}, {}'.format(k, v, parameters[k]['above_average_label'])
else:
print '{}={}, {}'.format(k, v, parameters[k]['below_average_label'])
check_min_max(data, parameters)
check_avg(data, parameters)
>>>
rain_percent=80.56, Going to rain
temp=30.45, Good Temp
rain_percent=80.56, Above average rain
temp=30.45, Below average temp