从字典中获取值,直到在 Python 中到达下一个键

Get value from a dictionary until next key is reached in Python

标题根本没有说明我的问题,但我会在这里告诉你。 我正在使用 Google API 解析来自 GMail 帐户的电子邮件。我需要从每封电子邮件中获取一些值。电子邮件 body 的格式如下:

Object: 有点东西。

程序:某事。

...

(很多字段)

...

请求:(可以是single-row或multi-row的值)

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

    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' 时出现问题,因为它可以是 multi-row 并且使用 'msg.split('\n')' 我得到这个:

"Request: (first row of field)", “(第二行字段)”, ...

"(n-th 字段行)"

在 Ordered Dict 中,只有第一行作为值。 我怎样才能得到全部内容? 希望解释清楚。

这是取自 msg_listmsg (already splitted) 的形式:

'',

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

'',

'Procedura: MATRIX - Enterprise Data Warehouse',

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

'Perimetro: Specifico',

'Priorit=C3=A0 richiesta: Alta',

'Tipologia Richiesta: Segnalazione Anomalia',

'Sottotipologia Richiesta: Altro',

'',

'Emergenza:',

'',

"Richiesta: Ad oggi l'algoritmo mensile di stima reddito (sequence DASTIRED)",

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

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

'dipendenze sono state soddisfatte ma attualmente vedo ancora il job nello',

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

'sia',

'ancora stato eseguito (problemi su flussi attesi?) e di provvedere al',

'recupero. Grazie',

'',

'UO Richiedente: INF',

'Autore: UT07080 - SPADINI MATTEO',

'Data richiesta risoluzione:',

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

'',

谢谢。

对您的代码稍作修改即可解决问题:

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

以上产生:
对象对象
Procedure the proceduresome datasome more data
请求请求行1请求行2请求行3
对象另一个对象
Procedure another proceduresome more datasome even more data
请求另一个请求行 1another request line2