将具有2层分隔符的字符串转换为字典 - python

时间:2013-09-08 19:00:29

标签: python string dictionary types tuples

给出一个字符串:

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层分隔符的字符串转换为字典?

3 个答案:

答案 0 :(得分:4)

你在阅读列表理解方面有点啰嗦:

>>> 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'}
>>>

答案 1 :(得分: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?

答案 2 :(得分:0)

>>> 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'}