代码之家  ›  专栏  ›  技术社区  ›  user2727704

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

  •  3
  • user2727704  · 技术社区  · 8 年前

    >>> 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 回复  |  直到 8 年前
        1
  •  15
  •   g.d.d.c    8 年前

    怎么样:

    {k: float(v) for k, v in [i.split(':') for i in s.split(',')]}
    
        2
  •  1
  •   Fred Kiss    8 年前

    可能会让人困惑,但你可以试试这个:

    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}
    
        3
  •  0
  •   jpp    8 年前

    您可以为此定义函数:

    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}
    
        4
  •  0
  •   shahbazkhan    8 年前

    试试这个:

    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}
    
        5
  •  0
  •   jpp    8 年前

    玩第三方熊猫,你可以做很多 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}