2011-03-28 69 views
1

在Python中將字符串解析爲int的最快方法是什麼?該字符串可能包括自定義單位,如「k」(公斤),「m」(百萬)或「b」(十億)。Python - 用自定義價格單元解析字符串

例如:

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

感謝。

回答

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 

創建一個查找表然後將數字分成數字部分和單位。如果單位部分存在,請查看我們的表格並使用它來創建最終數字。否則,返回號碼。

0

可以定義映射號碼給自己和單位零的詞典:

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

然後你字符串轉換爲int這樣

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

@Kimvais:你是什麼意思?我應該怎樣「鍛鍊」? – 2011-03-28 13:04:08

+0

這個解決方案真的不理想。雖然這是一個很好的想法,但它並不適合乘數不以X數量的零結束的情況,例如,當你想K是* 1024。 – JackWilson 2011-03-28 13:05:32

+0

哦,沒關係,我不識字:) – Kimvais 2011-03-28 13:07:25

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) 
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 
>>> 
+0

我們可以使用'units [result.group(2)]'並且單位爲''':1'。 – Cheng 2016-05-01 13:40:54