Python - 使用自定义价格单元解析字符串

时间:2011-03-28 12:52:18

标签: python string parsing

在Python中将字符串解析为int的最快方法是什么?该字符串可能包含自定义单位,例如“k”(千),“m”(百万)或“b”(十亿)。

例如:

100  -> 100
100k -> 100000
100m -> 100000000
100b -> 100000000000

感谢。

4 个答案:

答案 0 :(得分:6)

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

创建一个查找表,然后将数字拆分为数字部分和单位。如果单位部分存在,请查看我们的表格并使用它来创建最终数字。否则,请返回号码。

答案 1 :(得分:2)

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)

答案 2 :(得分:1)

编辑:更好的例证,可能的错误修复

>>> 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
>>> 

答案 3 :(得分:0)

您可以定义一个字典,将数字映射到自身,单位映射为零:

units = {"0":"0", "1":"1", #etc.
         "k":"000",
         "m":"000000"} # etc.

然后将字符串转换为类似

的int
int_value = int("".join(map(units.get, string_value)))