Какой самый быстрый способ разобрать строку в int в Python? Строка может включать пользовательские единицы, такие как «k» (килограмм), «m» (миллион) или «b» (миллиард).
Например:
100 -> 100 100k -> 100000 100m -> 100000000 100b -> 100000000000
Спасибо.
def convert(val): lookup = {'k': 1000, 'm': 1000000, 'b': 1000000000} unit = val[-1] try: number = int(val[:-1]) except ValueError: # do something if unit in lookup: return lookup[unit] * number return int(val) >>> print convert("100m") >>> 100000000
Создайте таблицу поиска, а затем разделите число на числовую часть и единицу измерения.Если часть единицы существует, посмотрите на нашу таблицу и используйте ее для создания окончательного числа.В противном случае верните номер.
def numerize(s): multipliers = {'k': 10**3, 'm': 10**6, 'b': 10**9} if s[-1] in multipliers: return int(s[:-1]) * multipliers[s[-1]] else: return int(s)
РЕДАКТИРОВАТЬ: лучшие примеры, исправление возможных ошибок
>>> def get_unit(ustr): ... if ustr == '': return 'u' ... return ustr.lower() ... >>> import re >>> r=re.compile('([1-9][0-9]*)([kKmMbBgG]?)') >>> units={'k':1000,'m':1000000,'g':1000000000,'b':1000000000,'u':1} >>> result=r.match('120k') >>> int(result.group(1))*units[get_unit(result.group(2))] 120000 >>> result=r.match('44') >>> int(result.group(1))*units[get_unit(result.group(2))] 44 >>> result=r.match('44M') >>> int(result.group(1))*units[get_unit(result.group(2))] 44000000 >>>
Вы можете определить словарь, который отображает числа в себя и единицы в нули:
units = {"0":"0", "1":"1", #etc. "k":"000", "m":"000000"} # etc.
Затем вы конвертируете строку в int, как это
int_value = int("".join(map(units.get, string_value)))