在Python中将字符串解析为int的最快方法是什么?该字符串可能包括自定义单位,如“k”(公斤),“m”(百万)或“b”(十亿)。Python - 用自定义价格单元解析字符串
例如:
100 -> 100
100k -> 100000
100m -> 100000000
100b -> 100000000000
感谢。
在Python中将字符串解析为int的最快方法是什么?该字符串可能包括自定义单位,如“k”(公斤),“m”(百万)或“b”(十亿)。Python - 用自定义价格单元解析字符串
例如:
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
创建一个查找表然后将数字分成数字部分和单位。如果单位部分存在,请查看我们的表格并使用它来创建最终数字。否则,返回号码。
可以定义映射号码给自己和单位零的词典:
units = {"0":"0", "1":"1", #etc.
"k":"000",
"m":"000000"} # etc.
然后你字符串转换为int这样
int_value = int("".join(map(units.get, string_value)))
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 [result.group(2)]'并且单位为''':1'。 – Cheng 2016-05-01 13:40:54
@Kimvais:你是什么意思?我应该怎样“锻炼”? – 2011-03-28 13:04:08
这个解决方案真的不理想。虽然这是一个很好的想法,但它并不适合乘数不以X数量的零结束的情况,例如,当你想K是* 1024。 – JackWilson 2011-03-28 13:05:32
哦,没关系,我不识字:) – Kimvais 2011-03-28 13:07:25