将以逗号分隔的键值对字符串转换为字典

时间:2018-09-06 00:44:02

标签: python python-3.x dictionary

我需要将用冒号分隔的键值对用逗号分隔的字符串转换成期望值是浮点数的字典。我能够做到这一点:

>>> s = 'us:0.9,can:1.2,mex:0.45'
>>> dict(x.split(':') for x in s.split(','))

结果为:

{'us': '0.9', 'can': '1.2', 'mex': '0.45'}

但不确定如何将值强制为非字符串,即我期望这样:

{'us': 0.9, 'can': 1.2, 'mex': 0.45}

如何强制将值设为浮点数?

谢谢!

5 个答案:

答案 0 :(得分:11)

怎么样:

{k: float(v) for k, v in [i.split(':') for i in s.split(',')]}

答案 1 :(得分:1)

也许会令人困惑,但是您可以尝试以下方法:

s = 'us:0.9,can:1.2,mex:0.45'

dict((a, float(b)) for a,b in [x.split(':') for x in s.split(',')])

输出:

{'us': 0.9, 'can': 1.2, 'mex': 0.45}

答案 2 :(得分:0)

您可以为此定义一个函数

s = 'us:0.9,can:1.2,mex:0.45'

def key_val_split(L):
    key, val = L.split(':')
    return key, float(val)

res = dict(key_val_split(x) for x in s.split(','))

{'us': 0.9, 'can': 1.2, 'mex': 0.45}

答案 3 :(得分:0)

尝试一下:

s = 'us:0.9,can:1.2,mex:0.45'
t = {k:float(v) for k, v in dict(x.split(':') for x in s.split(',')).items()}
print(t)

输出为:

{'us': 0.9, 'can': 1.2, 'mex': 0.45}

答案 4 :(得分:0)

在玩第三方熊猫游戏时,您可以使用pd.read_csv做很多事情:

import pandas as pd

s = 'us:0.9,can:1.2,mex:0.45'

d = pd.read_csv(pd.compat.StringIO(s), sep=':', header=None, lineterminator=',')\
      .set_index(0)[1].to_dict()

{'us': 0.9, 'can': 1.2, 'mex': 0.45}