我正在使用simple-salesforce通过Python查询salesforce。我的查询返回以下格式的ordereddict
OrderedDict([('totalSize', 1), ('done', True), ('records', [OrderedDict([('attributes', OrderedDict([('type', 'Case'), ('url', 'www.blah.com')])), ('Number', '6904'), ('Severity', 'P1'), ('Product__c', 'd231'), ('Status', 'Available'), ('Case_Comments__r', OrderedDict([('totalSize', 1), ('done', True), ('records', [OrderedDict([('attributes', OrderedDict([('type', 'Comment__c'), ('url', 'www.blah.com')])), ('CreatedDate', '2019-11-05T12:10:06.000+0000'), ('Text__c', 'dummy text'), ('Created_By_Name', 'TEST USER')])])]))])])])我想提取特定的数据,但在访问内部有序的字典时遇到问题。例如,我可以通过执行以下操作来获取'Number‘和'Severity’
list1 = [(record['Number'], record['Severity']) for record in data['records']]但我也需要访问'Comment_c',我已经尝试了下面的方法,但它失败了。
list1 = [(record['Number'], record['Severity'], record['Case_Comments__r']['records']['Text__c']) for record in data['records']]失败并显示"TypeError:列表索引必须是整数或切片,而不是字符串“
发布于 2019-12-06 00:50:48
如您所见,record['Case_Comments__r']['records']是OrderedDict的列表:
('records', [OrderedDict(...), ...])因此,不可能使用record['Case_Comments__r']['records']['Text__c']这样的字符串对该列表进行索引-您需要遍历该列表并从每个OrderedDict提取数据
..., record['Severity'], [comment['Text__c'] for comment in record['Case_Comments__r']['records']]发布于 2019-12-06 01:36:22
这是从simple-salesforce查询结果中解析OrderedDict的另一种方法,它允许您在搜索的是None时设置默认值。
def get_field_data_from_salesforce_object(sf_session, field, default="some_default"):
field_query = f"Select {field} FROM Case WHERE Id = 'some-id'"
field_data = sf_session.query(field_query)
for k, v in field_data.items():
if k == "records":
for item in v:
field_key = item.get(field)
if field_key is None:
if default is not None:
field_key = default
else:
field_key = "(Not provided)"
return field_keyhttps://stackoverflow.com/questions/59199550
复制相似问题