2016-07-01 7 views
0

私が持っている文字列値のような:ない標準分割

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

私が変換したいです ""先行する " - "文字を含む文字列はキーでなければならず、スペースの後ろにあるものはそれに先行するキーの値でなければなりません。 私たちは "A" で作業している場合は、私が欲しいのような結果の辞書です:

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

これは、最後の値( '[[s dfdsf sdf]')でない場合は単純ですが、スペースが含まれています。さもなければ、私はちょうど外かっこを取り除き、 "a"を分割し、結果のリストをdict_aに変換するでしょうが、現実は私の側にありません。 ' - sfdfj'、 'aidjf'、 '-dugs'、 'jfdsif'、 '-usda'、 '[[S dfdsf自衛隊]']

list_a = [:私のようなリストを取得する場合であっても

これで十分です。 助けていただければ幸いです。

答えて

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

私はあなたにそれについて行く方法を伝えることができます。 引用符と外側の括弧を取り除きます。スペースを使用して文字列を分割します。得られたリストを繰り返して、カッコを確認してください。開いている括弧の数をカウントしたまま、すべてのリスト項目を、そのような項目の間にスペースを入れた文字列として、同じ数の閉じ括弧が出現するまで結合します。残りの項目はそのままです。あなたはそれを実装しようとすることができます。問題が発生した場合は、コードをお手伝いします。

@チョンさんの答えは、それについて行くためのより良い方法です。

0

の正規表現を使用する:ChongTangのアイデア@使用

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

>>> 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 
関連する問題