0

k、vのdictに解析しようとしている次の文字列があります

foo = "abc=foo.bazz; defg=6cab; rando=ランダム; token=foobar"

本当に醜いコードでこれを達成できます

foo_dict = {}
bar = foo.split(';') 
for item in bar:
  x = item.split('=')
foo_dict[x[0]] = x[1]

これは単純な 1 行のリスト内包表記であることが望ましいと思います。

4

3 に答える 3

4
dict(part.split("=") for part in foo.split(";"))

私はうまくいくと思う

>>> foo = "abc=foo.bazz; defg=6cab; rando=random; token=foobar"
>>> dict(part.split("=") for part in foo.split(";"))
{' token': 'foobar', 'abc': 'foo.bazz', ' defg': '6cab', ' rando': 'random'}
>>>

part.strip().split("=")そうすると、余分なスペースが取り除かれる可能性があります...

>>> dict(part.strip().split("=") for part in foo.split(";"))
{'token': 'foobar', 'abc': 'foo.bazz', 'defg': '6cab', 'rando': 'random'}
于 2012-10-03T21:08:17.440 に答える
4

urlparseモジュールの使用について:

In [1] import urlparse
In [2] foo = "abc=foo.bazz; defg=6cab; rando=random; token=foobar"
In [3]: urlparse.parse_qs('abc=foo.bazz; defg=6cab; rando=random; token=foobar')
Out[3]: 
     {' defg': ['6cab'],
      ' rando': ['random'],
      ' token': ['foobar'],
      'abc': ['foo.bazz']}

In [4]: dict(urlparse.parse_qsl('abc=foo.bazz; defg=6cab; rando=random; token=foobar'))
Out[4]: {' defg': '6cab', ' rando': 'random', ' token': 'foobar', 'abc': 'foo.bazz'}

キーにこれらの空白の値が必要かどうかはわかりませんが、明らかに簡単に掃除できます。

于 2012-10-03T21:20:23.367 に答える
4
In [107]: foo = "abc=foo.bazz; defg=6cab; rando=random; token=foobar"

In [115]:  dict(map(str.strip,x.split('=')) for x in foo.split(';'))
   .....: 
Out[115]: {'abc': 'foo.bazz', 'defg': '6cab', 'rando': 'random', 'token': 'foobar'}
于 2012-10-03T21:08:24.763 に答える