2016-12-13 5 views
0

dictionaryをどのように解析すればいいですか?valuesにはチケット番号のみが含まれていますか?構文二項値Python

現在の辞書:

{'8.8.8.8': 'Open Menu 10A-003272 10A-003328 10A-003652', '8.8.8.9': '10A-003069 10/21/2016', '8.8.8.10': 'Open Menu 10A-003145 10/21/2016'} 

目的辞書:チケット番号を見つけるために

with open(esccbList, 'r') as f: 
    d = {} 
    for line in f: 
     d[line.strip()] = next(f, '').strip() 

正規表現:

{'8.8.8.8': '10A-003272 10A-003328 10A-003652', '8.8.8.9': '10A-003069', '8.8.8.10': '10A-003145'} 

コードは、辞書を作るために使用

n = re.search(r'10A-\d{6}',item, re.M|re.I) 
+0

は、チケット番号が特定のパターンに従っているのですか? –

+0

@WasiAhmadはい、各チケットを見つける正規表現コードが含まれています。 – someGuy45

+0

私は答えを加えました、うまくいけばそれはあなたを助けるでしょう。 –

答えて

2

あなたのチケット番号のサブストリングのみハイフン-が含まれていると仮定すると、あなたはこのようなを達成するために辞書のcomprhensionを使用することができます:new辞書によって

my_dict = {'8.8.8.8': 'Open Menu 10A-003272 10A-003328 10A-003652', '8.8.8.9': '10A-003069 10/21/2016', '8.8.8.10': 'Open Menu 10A-003145 10/21/2016'} 

new = {k: ' '.join(i for i in v.split() if '-' in i) for k, v in my_dict.items()} 

最終値ホールドは次のようになります。

{'8.8.8.9': '10A-003069', 
'8.8.8.10': '10A-003145', 
'8.8.8.8': '10A-003272 10A-003328 10A-003652'} 
+1

@ someGuy45:今それを受け入れる以外にも、回答をupvoteできます。 –

+0

@ someGuy45正規表現を使った点はなんですか? –

-2

あなたは何らかの機能を持っていると思います。

def is_ticket_number(item): 
    """ returns True only if item is a ticket number """ 
    return re.search(r'10A-\d{6}',item, re.M|re.I) 

そして、あなたがする必要があるすべては

d = {k: v for k, v in d.items() if is_ticket_number(v)} 
0
d = { k, clean_ticket(v) for k,v in original_dict.items() if is_ticket(v) } 

がis_ticketのように見えるのは、

def clean_ticket(v): 
    return v.split("Open Menu")[1].strip() 
メニューを開くを取り除き、機能clean_ticket(V)を作る

def is_ticket(v): 
    return "Open Menu" in v 

のようなものでなければなりません

そういうもの。

2

ディクショナリを希望の形式で印刷するための回答が更新されました。

import re 

pattern = re.compile(r'10A-\d{6}') 
info = {'8.8.8.8': 'Open Menu 10A-003272 10A-003328 10A-003652', 
     '8.8.8.9': '10A-003069 10/21/2016', 
     '8.8.8.10': 'Open Menu 10A-003145 10/21/2016'} 

output = {} 
for key, value in info.items(): 
    tokens = value.split() 
    val = '' 
    for token in tokens: 
     if pattern.match(token): 
      val = val + token + ' ' 
    val = val.strip() 
    output[key] = val; 

print(output) 

それは印刷されます。

{'8.8.8.8': '10A-003272 10A-003328 10A-003652', 
'8.8.8.9': '10A-003069', 
'8.8.8.10': '10A-003145'}