2016-07-01 39 views
0

我有字符串值,如:不規範分裂

A = '[ - sfdfj aidjf -dugs jfdsif -usda [[S dfdsf SDF]]]'

我要改造 「一」到字典中:帶有前面「 - 」字符的字符串應該是鍵,並且空格之後應該是前面的鍵的值。 如果我們用 「一」 的工作,那麼我要的是生成的字典,如:

dict_a = { ' - sfdfj': 'aidjf', '-dugs': 'jfdsif', '-usda' :'[[s dfdsf sdf]]'}

如果不是最後一個值('[[s dfdsf sdf]]'),它將包含空格。否則,我會剝去外部括號並拆分「a」,然後將結果列表轉換爲dict_a,但是,現實不在我身邊。 即使我得到的名單,如:

list_a = [ ' - sfdfj', 'aidjf', '-dugs', 'jfdsif', '-usda', '[[S dfdsf自衛隊]']

這就夠了。 任何幫助將不勝感激。

回答

1

您可以按' - '分割字符串,然後再加上' - '。

a = '[-sfdfj aidjf -dugs jfdsif -usda [[s dfdsf sdf]]]' 
a = a[1:-1] # get ride of the start and end [] 
sections = a.split('-') 
dict_a = {} 
for s in sections: 
    s = s.strip() 
    if len(s) == 0: 
     continue 
    key_value = s.split(' ') # split key value by space 
    key = '-' + key_value[0]   # the first element is key 
    value = ' '.join(key_value[1:]) # the lefe are value 
    dict_a[key] = value 
+0

謝謝!正是我想要的:)。 –

0

我可以告訴你一個方法去解決它。 去掉引號和外括號。然後使用空格分割字符串。遍歷所獲得的列表並檢查是否有任何開頭的括號。保留開始括號的數量,將所有列表項目作爲每個這樣的項目之間帶有空格的字符串連接,直到遇到相同數量的右括號。其餘項目保持原樣。你可以嘗試實施它。如果您遇到任何問題,我會幫您處理代碼。

@ chong的回答是一個更好的方法。

0

使用正則表達式:

>>> import re 
>>> dict(re.findall('(-\S+) ([^-]+)', a[:-1].replace(' -', '-'))) 
{'-sfdfj': 'aidjf', '-dugs': 'jfdsif', '-usda': '[[s dfdsf sdf]]'} 

使用@ ChongTang的想法:

>>> dict(('-' + b).strip().split(maxsplit=1) for b in a[1:-1].split('-') if b) 
{'-sfdfj': 'aidjf', '-dugs': 'jfdsif', '-usda': '[[s dfdsf sdf]]'} 
0

你可以試試這個:

import re 

a='[-sfdfj aidjf -dugs jfdsif -usda [[s dfdsf sdf]]]' 

pattern_key=re.compile(r'(?P<key>-\S+)\s+') 
pattern_val=re.compile(r' (?P<val>[^-].*?)(-|\Z)') 
d={} 

matches=pattern_key.finditer(a) 
matches1=pattern_val.finditer(a) 

for m,n in zip(matches, matches1): 
    d[m.group('key')]= n.group('val') 

print d