从字典中获取值,直到在Python

时间:2016-07-12 10:14:57

标签: python dictionary key

标题根本没有解释我的问题,但我会告诉你。 我正在使用Google API解析来自GMail帐户的电子邮件。从每封电子邮件中我需要获得一些价值。电子邮件正文形成如下:

对象:某事。

程序:某事。

...

(许多领域)

...

请求:(可以是单行或多行的值)

要获得我需要的所有字段,我这样做:

    for msg in msg_list:
        data_dict = OrderedDict()

        msg = msg.replace('\r','')
        msg = msg.split('\n')

        for row in msg:
            row = row.split(":")

            if row[0] in key_list:
               data_dict[row[0]] = row[1]

        dict_list.append(data_dict)

return dict_list

当我解析特定字段'Request'时会出现问题,因为它可以是多行的并且使用'msg.split('\ n')'我得到这个:

“请求:(第一行字段)”, “(第二排场)”, ...

“(第n行字段)”

在Ordered Dict中只将第一行作为值。 我怎么能得到整个内容? 我希望它得到很好的解释。

这是msg (already splitted)的形式msg_list

  

'',

     

'La pratica Ticketing TSX - 2016-049044 necessita di essere   lavorata'。,

     

'',

     

'Procedura:MATRIX - 企业数据仓库',

     

'Oggetto:Mancata esecuzione algoritmo stima reddito(DASTIRED)',

     

'Perimetro:Specifico',

     

'优先级= C3 = A0 richiesta:Alta',

     

'Tipologia Richiesta:Segnalazione Anomalia',

     

'Sottotipologia Richiesta:Altro',

     

'',

     

'Emergenza:',

     

'',

     

“Richiesta:Ad oggi l'algoritmo mensile di stima reddito(序列   DASTIRED)”,

     

“non risulta ancora essere stato eseguito.Solitamente l'esecuzione”,

     

'automatica avviene entro i primi 10 giorni del mese dopo che tutte   乐”,

     

'dipendenze sono state soddisfatte ma attualmente vedo ancora il job   尼洛”,

     

'schedulatore con stato W. Chiedo la cortesia di verificare   perch = C3 = A9 non =',

     

'SIA',

     

'ancora stato eseguito(problemi su flussi attesi?)e di provvedere   人的”,

     

“recupero。古拉爵”,

     

'',

     

'UO Richiedente:INF',

     

'Autore:UT07080 - SPADINI MATTEO',

     

'Data richiesta risoluzione:',

     

'Scadenza SLA:24/06/2016 14.12.36',

     

'',

谢谢。

1 个答案:

答案 0 :(得分:1)

对代码稍作修改应该可以解决问题:

import collections
key_list = ['Object','Procedure','Request']
dict_list = []
msg1 = 'Object: the object\nProcedure: the procedure\n'
msg1 += 'some data\nsome more data\n'
msg1 += 'Request: request line 1\nrequest line2\nrequest line3\n'
msg2 = 'Object: another object\nProcedure: another procedure\n'
msg2 += 'some more data\nsome even more data\n'
msg2 += 'Request: another request line 1\nanother request line2\n'
msg_list =[msg1,msg2]

for msg in msg_list:
    data_dict = collections.OrderedDict()
    msg = msg.replace('\r','')
    msg = msg.split('\n')
    for row in msg:
        row = row.split(":")
        if row[0] in key_list:
            key = row[0]
            data_dict[key] = row[1]
        elif key in key_list:
            data_dict[key] += row[0]
        else:
            key = ''

    dict_list.append(data_dict)

#show results
for i in dict_list:
    for k,v in i.items():
        print k,v

以上产生:
对象对象
程序程序数据库更多数据
请求请求行1request line2request line3
对象另一个对象
程序另一个程序更多数据更多的数据
请求另一个请求行1另一个请求line2