1

与えられた文字列:

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 層の区切り文字を含む文字列を辞書に変換する簡単な方法はありますか?

4

3 に答える 3

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'}
>>>
于 2013-09-08T19:08:02.490 に答える
2
>>> s = 'x\t1\ny\t2\nz\t3'
>>> spl = s.split()
>>> dict(zip(*[iter(spl)]*2))
{'y': '2', 'x': '1', 'z': '3'}

str.split()すべてのタイプの空白文字を処理します。たとえば、区切り文字が*and$の場合、次を使用できます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'}

関連: Python ではどのように機能しますか?zip(*[iter(s)]*n)

于 2013-09-08T19:06:08.050 に答える