我有一个需要填写的字典列表。它具有客户服务案例编号的顶级标识符。我有另一个词典列表,其中包含与案例相关的所有电子邮件信息 - 这些词典还包含与电子邮件相关的案例编号。
我正在尝试分解电子邮件列表并将它们关联到第一个案例列表中。
我正在使用 Simple Salesforce Package 提取信息。
#First dictionary:
Cases =
[{CaseNumber : "1",
Date: "value",
Reason: "value",
Emails: NONE (need to add here)},
{CaseNumber : "2",
Date: "value",
Reason: "value",
Emails: NONE (need to add here)}]
#etc. this list is a set of dictionaries of all the cases related to an order #number that is passed in previously.
#The second list of is a list of all of the emails related to the above cases -
Emails =
[{CaseNumber : "1",
Date: "value",
EmailBody: "value",},
{CaseNumber : "1",
Date: "value",
EmailBody: "value",},
{CaseNumber : "2",
Date: "value",
EmailBody: "value",}]
#So this list needs to get nested accordingly to the Emails key by matching on case number
Cases =
[{CaseNumber : "1",
Date: "value",
Reason: "value",
Emails: emails[1,2,etc]},
{CaseNumber : "2",
Date: "value",
Reason: "value",
Emails: emails[3,4,etc]}]
应创建与顶级案例 ID 相关的嵌套词典列表。
可能不是最快的解决方案,但我会浏览电子邮件并根据CaseNumber
. 这将是基于该值的电子邮件列表。从这里,您可以遍历每个案例,获取CaseNumber
,并将列表插入到Emails
字典的部分中
from collections import defaultdict
e = defaultdict(list)
for email in Emails:
case = email.get('CaseNumber')
e[case].append(email)
for case in Cases:
casenumber = case.get('CaseNumber')
case['Emails'] = e[casenumber]
# Cases now looks like [{'CaseNumber': '0', 'Emails': [{'EmailBody': 'value'},...], {'CaseNumber': '1', 'Emails': [{'EmailBody': 'value',...}]}]
defaultdict
是一个字典,如果键不存在,它将插入一个列表,允许e[key].append()
调用而不检查键是否在字典中。文档在这里
编辑:
在完整的利益,要做到这一点的方式,而不 defaultdict
将如下所示:
e = {}
for email in Emails:
case = email.get('CaseNumber')
if not case in e:
# create single element list if key not in dictionary
e[case] = [email]
else:
e[case].append(email)
更简而言之,您可以使用get
来KeyErrors
完全避免:
for email in Emails:
case = email.get('CaseNumber')
e[case] = e.get(case, []).append(email)
Whereget
将返回关联的值case
或指定为第二个参数的默认值(此处为 a list
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句