将值分配给表的字典

时间:2014-12-18 16:44:56

标签: python python-2.7

我的情况是销售经理回复自动电子邮件,其中包含主要和次要潜在客户的提前期。他们的回应将包括指示哪种类型的铅以及提前期。例如:

Primary_Lead 10
Secondary_Lead 20

我编写了一个脚本来查看电子邮件(基于某个主题)并查找响应中的提前期。我想将这些添加到表的Lead_Time字典中。我认为一切正常,除了我的最后两行将值附加到Sales ManagerLead Time。我在这做错了什么?我知道整个电子邮件的内容增加了额外的复杂程度,我不需要帮助,但想提供实际的代码。

import win32com.client
import re

olFolderInbox = 6
olMailItem = 0

outlook = win32com.client.Dispatch("Outlook.Application")
mapi = outlook.GetNamespace('MAPI')
inbox =  mapi.GetDefaultFolder(olFolderInbox)
My_Folder = inbox.Folders("Leads")


Lead_Time = {
    'Primary_Leads':         {'Sales Manager' : [],'Lead Time' : []},
    'Secondary_Leads':       {'Sales Manager' : [],'Lead Time' : []}

}

for i in range (My_Folder.Items.Count): #loops through all emails in Leads Folder
  message = My_Folder.Items[i] #sets the message
  if "RE: Lead Time Report" in message.Subject: #checks for a certain subject
    for tbl in Lead_Time:
        if tbl.upper() in message.Body.upper():
          tbl['Sales Manager'].append map(int,re.findall(tbl +"* (\d+)",message.Body,re.I))
          tbl['Lead Time'].append message.sender

1 个答案:

答案 0 :(得分:1)

当你真的要附加值时,你正在迭代Lead_Time的键。

您可以在自己的代码中看到这种混淆:

for tbl in Lead_Time:
    if tbl.upper() in message.Body.upper():
        tbl['Sales Manager'].append

在第二行,您将tbl视为字符串。在第三行,您将tbl视为字典中与其关联的数组值。

您可以按如下方式更改代码:

Lead_Time[tbl]['Sales Manager'].append ...
Lead_Time[tbl]['Lead Time'].append ...

或者你可以在迭代时要求密钥和值:

for table_name, value in Lead_Time.items():
    if table_name.upper() in message.Body.upper():
        value['Sales Manager'].append ...

您可以使用这个更简单的示例来查看默认dict迭代器的输出:

some_dict = {1: 2, 3: 4}
for key in some_dict:
    print key

打印1和3。