如何将十亿或百万缩写的字符串转换为列表中的整数

时间:2018-07-31 10:17:10

标签: python string list integer

我很少有字符串项目,这些字符串项目是列表中十亿或百万缩写的数字:

list = ["150M", "360M", "2.6B", "3.7B"]

我想使用一种语法,可以将这些字符串项转换为以千为单位的整数(例如150M> 150,000,3.7B> 3,700,000),谢谢

3 个答案:

答案 0 :(得分:3)

您应该真正展示一些尝试自己解决问题的尝试,但这是一个简单的示例:

multipliers = {'K':1000, 'M':1000000, 'B':1000000000}

def string_to_int(string):
    if string[-1].isdigit(): # check if no suffix
        return int(string)
    mult = multipliers[string[-1]] # look up suffix to get multiplier
     # convert number to float, multiply by multiplier, then make int
    return int(float(string[:-1]) * mult)

testvals = ["150M", "360M", "2.6B", "3.7B"]

print(list(map(string_to_int, testvals)))

答案 1 :(得分:1)

您可以将列表理解与字典映射一起使用:

l = ["150M", "360M", "2.6B", "3.7B"]
m = {'K': 3, 'M': 6, 'B': 9, 'T': 12}
print([int(float(i[:-1]) * 10 ** m[i[-1]] / 1000) for i in l])

这将输出:

[150000, 360000, 2600000, 3700000]

答案 2 :(得分:0)

另一种解决方案,使用re.sub

import re

lst = ["150M", "360M", "2.6B", "3.7B"]
tbl = {'K':1, 'M':1_000, 'B':1_000_000}

new_lst = [int(i) for i in (re.sub(r'([\d\.]+)(K|M|B)', lambda v: str(int(float(v.groups()[0]) * tbl[v.groups()[1]])), i) for i in lst)]
print(new_lst)

打印:

[150000, 360000, 2600000, 3700000]