2012-10-03 37 views
0

我有以下字符串,我試圖解析爲k的字典,V​​如何做一個列表理解服用第一列表,然後一個字典在python

富=「ABC = foo中。 bazz; DEFG = 6cab; RANDO =隨機;記號= foobar的」

我可以用一些非常醜陋的代碼

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

我更喜歡這是一個簡單的1線列表理解實現這一目標。

+0

小心刪除每個分號後面的空格,否則它將成爲密鑰的一部分。 – chepner

回答

4

什麼:

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

不知道你是否希望在鍵中輸入空白值,但顯然易於清理。

+1

+100使用庫而不是重新發明輪子。 – georg

+0

tbh我認爲這是非常簡單的邏輯,任何調用它們的人都是一個程序員應該能夠實現......它就像你說的應該使用'np.transpose(matrix)'而不是'zip(* matrix) –

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("=")可能擺脫多餘的空格...關於使用urlparse模塊

>>> dict(part.strip().split("=") for part in foo.split(";")) 
{'token': 'foobar', 'abc': 'foo.bazz', 'defg': '6cab', 'rando': 'random'} 
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'} 
+1

很好的答案;-P –

+0

@JoranBeasley偉大的思想認爲一樣。 :) –

+0

感謝很多傢伙 - 現在我選誰:P –

相關問題