2015-02-25 1 views
0

J'interroge Salesforce via le paquet python, Simple_Salesforce. Les résultats sont retournés sous forme de OrderdDict. Je voudrais convertir les enregistrements en une liste simple de listes (bien que dans l'échantillon il y ait seulement 1 enregistrement). C'est très facile à faire, sauf dans cet exemple, le champ Approval_Date__c provient d'une table liée via une jointure SOQL. Cela semble être renvoyé sous la forme d'un OrderedDict imbriqué. Je suis incapable de générer la liste avec cette valeur incluse. Je reçois KeyError: 'Opportunity__r'Compréhension de liste pour un dictionnaire imbriqué ordonné en liste Python

Mon code:

import collections 
orderedDict = collections.OrderedDict() 
from collections import OrderedDict 
query_results = OrderedDict([(u'totalSize', 1), (u'done', True), (u'records', [OrderedDict([(u'attributes', OrderedDict([(u'type', Orders__c'), (u'url', u'someurl')])), (u'Id', u'a4T13000000sdfd'), (u'Order_Type__c', u'Standard'), (u'Opportunity__c', u'006130000145451245'), (u'Opportunity__r', OrderedDict([(u'attributes', OrderedDict([(u'type', u'Opportunity'), (u'url', u'someurl1')])), (u'Approval_Date__c', u'2014-12-31')]))])])]) 


List_Results = [[record['Id'], record['Order_Type__c'], [[record['Approval_Date__c']] for record in query_results['Opportunity__r']]] for record in query_results['records']] 
print List_Results 

Résultat souhaité:

[[u'a4T13000000sdfd', u'Standard', u'2014-12-31']] 

simple conversation hors du champ de la OrderedDict imbriqué pour le prouver fonctionne:

List_Results = [[record['Id'], record['Order_Type__c']] for record in query_results['records']] 

Répondre

1

Vous » Re obtenir l'erreur de clé parce que vous essayez de rechercher Opportunity__r dans q uery_results, qui n'a pas de clé Opportunity__r. Au lieu de cela, Opportunity__r est une clé dans le record.

Je pense que ce que vous voulez est:

List_Results = [[record['Id'], record['Order_Type__c'], record['Opportunity__r']['Approval_Date__c']] for record in query_results['records']] 
+0

simple, je ne faisais que me prêter à confusion. Bonne réponse – user2242044