假设三个非重叠的整数数值范围( r1 , r2 和 r3 )以及一个目标整数 i
i = 7
ranges = {"r1": [0,4], "r2": [5,8], "r3": [9,10]}
什么函数会返回目标整数落在其范围内的字典键(即数值范围的名称)?
sought_function(i, ranges)
# "r2"
答案 0 :(得分:2)
列表推导如何迭代dictionary items并检查i
是否在范围内:
>>> i = 7
>>> ranges = {"r1": [0,4], "r2": [5,8], "r3": [9,10]}
>>> [key for key, (low, high) in ranges.iteritems() if low <= i <= high]
['r2']
使用iteritems()
,因为问题标有Python-2.7
。
如果您只需要第一个值,请使用next()
:
>>> next(key for key, (low, high) in ranges.iteritems() if low <= i <= high)
'r2'
请注意,如果没有与条件匹配的值,则会出现StopIteration
异常。您可以处理错误,如果在您的情况下有意义,则提供默认值。
答案 1 :(得分:1)
如果范围可以重复/重叠
iranges = [x for x, r in ranges.items() if r[0] <= i <= r[1]]
如果只能有一个或无
irange = next((x for x, r in ranges.items() if r[0] <= i <= r[1]), None)
items
为您提供与Python 3的兼容性......如果您需要它