我的情况是销售经理回复自动电子邮件,其中包含主要和次要潜在客户的提前期。他们的回应将包括指示哪种类型的铅以及提前期。例如:
Primary_Lead 10
Secondary_Lead 20
我编写了一个脚本来查看电子邮件(基于某个主题)并查找响应中的提前期。我想将这些添加到表的Lead_Time字典中。我认为一切正常,除了我的最后两行将值附加到Sales Manager
和Lead 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
答案 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。