【发布时间】:2016-06-21 07:36:44
【问题描述】:
我正在使用simple_salesforce 查询 CRM 关系数据库。使用SOQL 查询数据,这是SQL 的变体,专门用于Salesforce。
它返回嵌套的有序字典。在“加入”时,如果没有记录,则返回 None。如果有记录,则返回OrderedDict。我的循环似乎不是最有效的,因为它重复了几行。我正在寻找一种更简洁的方式来编写循环。
使用的查询:
select Id, Subject, Account.Name, Opportunity.Name From Case where ID = '500xxxxxxxxxxxxx'
代码:
from collections import OrderedDict
od = OrderedDict([
(u'totalSize', 1),
(u'done', True),
(u'records', [OrderedDict([
(u'attributes', OrderedDict([
(u'type', u'Case'),
(u'url', u'/services/data/v29.0/sobjects/Case/500xxxxxxxxxxxxxxxx')
])
),
(u'Id', u'500xxxxxxxxxxxxxxxx'),
(u'Subject', u"Sample Case 1"),
(u'Account', OrderedDict([
(u'attributes', OrderedDict([
(u'type', u'Account'),
(u'url', u'/services/data/v29.0/sobjects/Account/001xxxxxxxxxxxxxxxx')
])
),
(u'Name', u'Sample Account 1')
])),
(u'Opportunity', None)]
)])])
output = []
def get_items(this_item):
for key, value in this_item.iteritems():
if key <> 'attributes':
if type(value) is OrderedDict:
for key, value in value.iteritems():
if key <> 'attributes':
record.append(str(value))
else:
record.append(str(value))
for item in od['records']:
record = []
record.append(get_items(item))
output.append(record)
print output
输出:
[['500xxxxxxxxxxxxxxxx', 'Sample Case 1', 'Sample Account 1', 'None']]
【问题讨论】:
-
请发布预期输出
-
@MaxU 刚刚发布了输出和期望。谢谢。
-
只检查
value的类型,如果是collections.OrderedDict就不要打印了 -
@MaxU 然后将
'Sample Account 1'从输出中排除,不是吗? -
并且您不想/不允许在脚本中指定记录名称:'Id'、'Subject'、'Account.Name'、'Opportunity'?
标签: python python-2.7 lambda salesforce ordereddictionary