TypeError: объект 'DictWrapper' не может быть подписан - PullRequest
0 голосов
/ 28 июня 2018

Я получаю эту ошибку, и я не могу понять, в каком направлении мне нужно идти, чтобы решить проблему

 TypeError: 'DictWrapper' object is not subscriptable 

Я получаю сообщение об ошибке при попытке извлечь некоторые данные из результатов поиска в API продавца Amazon с использованием этого кода Python:

products_api = mws.Products(access_key, secret_key, seller_id, region='US')
products = products_api.list_matching_products(marketplaceid=marketplace_usa, query='XAZ')

pp = pprint.PrettyPrinter(indent=1)
pp.pprint (vars(products))  # prints info below which contains the data I need

Я подумал, что мог бы использовать что-то вроде приведенной ниже команды, чтобы начать пробираться по результатам, но я получил вышеуказанную ошибку, и Google не указал мне направление, где я мог бы решить эту проблему. В конечном итоге я хочу извлечь из результатов «бренд» и несколько других полей.

a=products['_mydict']

..

{'_mydict': {'ListMatchingProductsResponse': {'ListMatchingProductsResult': {'Products': {'Product': [{'AttributeSets': {'ItemAttributes': {'Binding': {'value': 'Apparel'},
                                                                                                                                    'Brand': {'value': 'Crocs'},
                                                                                                                                        'Color': {'value': 'Tropical '
                                                                                                                                                           'Teal'},
                                                                                                                                        'Department': {'value': 'unisex-adult'},
                                                                                                                                        'IsAdultProduct': {'value': 'false'},
                                                                                                                                        'ItemDimensions': {'Height': {'Units': {'value': 'inches'},
                                                                                                                                                                      'value': '0.39'},
                                                                                                                                                           'Length': {'Units': {'value': 'inches'},
                                                                                                                                                                      'value': '0.39'},
                                                                                                                                                           'Weight': {'Units': {'value': 'pounds'},
                                                                                                                                                                      'value': '0.44'},
                                                                                                                                                           'Width': {'Units': {'value': 'inches'},
                                                                                                                                                                     'value': '0.39'}},
                                                                                                                                        'Label': {'value': 'crocs'},
                                                                                                                                        'ListPrice': {'Amount': {'value': '34.99'},.......

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Диктовка действительно сложная. Я немного его уменьшил, но это должно сработать и у вас:

print(products['_mydict']['ListMatchingProductsResponse']['ListMatchingProductsResult']['Products']['Product'][0]['AttributeSets']['ItemAttributes']['Brand'])

Я думаю, что проблема заключается во вложенном списке. В моем примере я просто использовал первый элемент [0]. Может быть, вам понадобится итерация здесь.

Он печатает:

{'value': 'Crocs'}
0 голосов
/ 28 июня 2018

Рассматривая реализацию DictWrapper в библиотеке python-amazon-mws , объект, полученный в качестве ответа, не является словарем и не должен использоваться как один. Это также то, что говорится в сообщении об ошибке.

Однако у объекта есть свойство parsed, которое возвращает ответ в формате словаря. Это то, что вы должны использовать.

products = products_api.list_matching_products(marketplaceid=marketplace_usa, query='XAZ')
products_as_dict = products.parsed
products_as_dict['_mydict']

Объект также содержит атрибут, предлагающий исходный вывод XML, на случай, если он вам когда-нибудь понадобится.

products_as_xml = products.original
...