2015-11-25 44 views
-1

我是新來的蟒蛇,並試圖找到一種方法,採取這樣的規則:解析規則字典在Python

Rule number: 23 [conversion_flag=1 cover=48 (1%) prob=0.71] 
X1Sbmor=1 
X1SMFBP=1 

Rule number: 14 [conversion_flag=0 cover=186 (5%) prob=0.45] 
X1Sbmor=0 
X1S3IwL=1 

Rule number: 22 [conversion_flag=0 cover=15 (0%) prob=0.33] 
X1Sbmor=1 
X1SO4PP=0 
... 
... 

它解析爲像這樣的詞典:

# if prob> 0.4 then key = 'group_1', and values are lists of tuples like this: 
{'group_1':[(X1Sbmor=1 & X1SMFBP=1),(X1Sbmor=0 & X1S3IwL=1)]} 

# if prob< 0.4 then key= 'group_2', and values are list of tuples like this: 
{'group_2':[(X1Sbmor=1 & X1SO4PP=0)]} 

我確定有一種方法可以自動解析規則,並按上面所述寫入字典。但我無法弄清楚。

+0

那你試試?或者你只是想要社區的答案?因爲這不是SO的工作原理。看看[旅遊] – inetphantom

回答

-1

希望這有助於:)

import re 

regex = r'Rule number: (\d+) \[conversion_flag=(\d+) cover=(\d+) (\(\d+%\)) prob=(\d+.\d+)\](?:((\w+)=(\d+)\n+(\w+)=(\d+)|\n)*)' 

text = """ Rule number: 23 [conversion_flag=1 cover=48 (1%) prob=0.71] 
X1Sbmor=1 
X1SMFBP=1 

Rule number: 14 [conversion_flag=0 cover=186 (5%) prob=0.45] 
X1Sbmor=0 
X1S3IwL=1 

Rule number: 22 [conversion_flag=0 cover=15 (0%) prob=0.33] 
X1Sbmor=1 
X1SO4PP=0""" 

matches = re.findall(regex,text) 


final = { 'group_1': [], 'group_2': []} 

for match in matches: 
    if match[4] > '0.4' : 
    final['group_1'].append((match[6] + '=' + match[7]+ ' & ' + match[8] + '=' + match[9],)) 
    else : 
    final['group_2'].append((match[6] + '=' + match[7]+ ' & ' + match[8] + '=' + match[9],)) 

print(final) 

輸出

python test.py 

{'group_2': [('X1Sbmor=1 & X1SO4PP=0',)], 'group_1': [('X1Sbmor=1 & X1SMFBP=1',), ('X1Sbmor=0 & X1S3IwL=1',)]} 
+0

我想知道爲什麼我的回答已被拒絕投票? – ashishmohite