通过Python循环添加/引用字典值

时间:2014-12-10 22:20:31

标签: python python-2.7

我使用名为Simple_Salesforce的python库来查询在线CRM数据库。我将查询字符串和查询结果存储在字典中。 Query_String和Results对每个表都是唯一的。我正在运行循环的一些问题,因为每个表中的第一个键是唯一的。如何将其合并到一个循环中,然后如何打印出与密钥相关的数据?这几乎就像我需要为表本身制作Case和Opportunity键,但不确定这是否可行。

from simple_salesforce import Salesforce

#Define all data
Query_Dict = [
    {'Cases' : [], 'Results' : [], "Query_String" : "Select Id, Opportunity From Case where Opportunity <> null"},
    {'Opportunity' : [], 'Results' : [], "Query_String" : "Select Id, Opportunity_Name From Opportunity where Status = 'New'"},
]

#open Salesforce Connection
sf = Salesforce(username='myusername', password='mypassword', security_token='mytoken')

#Dump the query results into a results key for each row then convert to proper format
for tbl in Query_Dict:
       tbl['Results'] = sf.query_all(tbl['Query_String']) 
       tbl['Cases'] = records tbl['Cases']['records']
       tbl['Opportunity'] = records tbl['Opportunity']['records']

#print results associated with Cases key
print Query_dict['Cases']

1 个答案:

答案 0 :(得分:2)

  

这几乎就像我需要为表格本身制作案例和机会键

你走在正确的轨道上。

完全按照您的建议行事的一种方法是使用名为Table_Name的密钥,例如Table_Name: "Cases",这样您就可以执行此操作:

tbl[tbl['Table_Name']] = …

(由于你的任务陈述的右半部分不是有效的Python代码而且我不确定它应该是什么意思,我不确定如何修复它,但可能只是意味着再次用"Cases"替换tbl['Table_Name']。)


但我认为更好的解决方案是保留表的字典,而不是列表,以及 表格名称:

Query_Dict = {
    'Cases': {'Cases' : [], 'Results' : [], "Query_String" : "Select Id, Opportunity From Case where Opportunity <> null"},
    'Opportunity': {'Opportunity' : [], 'Results' : [], "Query_String" : "Select Id, Opportunity_Name From Opportunity where Status = 'New'"},
}

现在,使用viewitems *:

迭代键值对
for name, tbl in Query_Dict.viewitems():
    tbl[name] = …

*请注意viewitems是2.7特定的。如果您想与早期的2.x版本兼容,可以使用iteritems;如果你想与3.x向前兼容,你可以使用items(只要Query_Dict小到足以使不必要的临时列表无害)。

这是完全使你的最后一行代码按照书面形式工作所需的内容(大写拼写错误除外):

print Query_Dict['Cases']

因为Query_Dict现在实际上是一个字典,而'Cases'作为键,而不是列表,这完全符合您的要求。