【问题标题】:Convert a string with 2-tier delimiters into a dictionary - python将具有 2 层分隔符的字符串转换为字典 - python
【发布时间】:2013-09-12 07:21:55
【问题描述】:

给定一个字符串:

s = 'x\t1\ny\t2\nz\t3'

我想转成字典:

sdic = {'x':'1','y':'2','z':'3'}

我这样做是为了让它工作:

sdic = dict([tuple(j.split("\t")) for j in [i for i in s.split('\n')]])

第一:['x\t1','y\t2','z\t3'] # str.split('\n')

然后:[('x','1'),('y','2'),('z','3')] # tuples([str.split('\t')])

最后:{'x':'1', 'y':'2', 'z':'3'} # dict([tuples])

但是有没有更简单的方法将带有 2 层分隔符的字符串转换为字典?

【问题讨论】:

    标签: python string dictionary types tuples


    【解决方案1】:

    您在遍历列表推导时有点冗长:

    >>> s = 'x\t1\ny\t2\nz\t3'
    >>> dd = dict(ss.split('\t') for ss in s.split('\n'))
    >>> dd
    {'x': '1', 'y': '2', 'z': '3'}
    >>>
    

    【讨论】:

      【解决方案2】:
      >>> s = 'x\t1\ny\t2\nz\t3'
      >>> spl = s.split()
      >>> dict(zip(*[iter(spl)]*2))
      {'y': '2', 'x': '1', 'z': '3'}
      

      str.split() 处理所有类型的空白字符。例如,如果分隔符是*$,那么您可以使用re.split

      >>> import re
      >>> s = 'x*1$y*2$z*3'
      >>> spl = re.split(r'[*$]{1}', s)
      >>> dict(zip(*[iter(spl)]*2))
      {'y': '2', 'x': '1', 'z': '3'}
      

      相关:How does zip(*[iter(s)]*n) work in Python?

      【讨论】:

        【解决方案3】:
        >>> m = [ (i[0], i[2]) for i in s.split("\n") ]
        >>> m
        [('x', '1'), ('y', '2'), ('z', '3')]
        >>> d = dict(m)
        >>> d
        {'y': '2', 'x': '1', 'z': '3'}
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-19
          • 2018-05-19
          • 2013-03-13
          • 2017-03-23
          相关资源
          最近更新 更多