Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-使用自定义价格单位解析字符串_Python_String_Parsing - Fatal编程技术网

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

Python-使用自定义价格单位解析字符串,python,string,parsing,Python,String,Parsing,在Python中,将字符串解析为int的最快方法是什么?该字符串可能包括自定义单位,如k千、m百万或b十亿 例如: 100 -> 100 100k -> 100000 100m -> 100000000 100b -> 100000000000 谢谢。您可以定义一个字典,将数字映射到自己,将单位映射到零: units = {"0":"0", "1":"1", #etc. "k":"000", "m":"000000"} # etc.

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

例如:

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

谢谢。

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

units = {"0":"0", "1":"1", #etc.
         "k":"000",
         "m":"000000"} # etc.
然后将字符串转换为int,如下所示

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

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

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

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

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

@你是什么意思?我应该怎么做?这个解决方案真的不理想。虽然这是一个好主意,但它不适用于乘法器不是以X个零结束的情况,例如,当你希望K是*1024时。@Kimvais:你是什么意思?我应该怎么做?这个解决方案真的不理想。虽然这是个好主意,但它不适用于乘法器不以X个零结束的情况,例如,当您希望K为*1024时。我们可以只使用单位[result.group2]和单位:1。我们可以只使用单位[result.group2]和单位:1。