import operator
ranges = {
'4' : 'a',
'70' : 'b',
'700': 'c',
'701': 'd',
'85' : 'e',
'87' : 'a',
}
def id_for_value(value):
possible = '*'
for idvalue, id in sorted(ranges.iteritems()):
if value.startswith(idvalue):
possible = id
elif idvalue > value:
break
return possible
这就足够知道某个值的id了。测试:
^{pr2}$
如果你真的想要范围,你可以用itertools.groupby要计算它:
def firstlast(iterator):
""" Returns the first and last value of an iterator"""
first = last = iterator.next()
for value in iterator:
last = value
return first, last
maxlen = max(len(x) for x in ranges) + 1
test_range = ('%0*d' % (maxlen, i) for i in xrange(10 ** maxlen))
result = dict((firstlast(gr), id)
for id, gr in itertools.groupby(test_range, key=id_for_value))
这就足够知道某个值的id了。测试:
^{pr2}$如果你真的想要范围,你可以用itertools.groupby要计算它:
给出:
相关问题 更多 >
编程相关推荐