我试图解析Prestashop API的结果。我准备了那段代码。
prestashop = PrestaShopWebServiceDict( URL, API_KEY )
def get_order(order_id):
orders = order_id.split(",")
for order in orders:
order = prestashop.get('orders', order)['order']
for product in products['order_row']:
print product['product_reference']
当订单与少数产品相关联时,它可以正常工作,结果如下:
[
{'product_id': '6', 'price': '39.000000', 'product_reference': '000001'},
{'product_id': '7', 'price': '38.000000', 'product_reference': '000002'},
{'product_id': '8', 'price': '37.000000', 'product_reference': '000003'},
]
result:
000001 000002 000003
在订单仅包含一个产品的情况下,结果如下:
{'product_id': '6', 'price': '39.000000', 'product_reference': '000001'}
我不能把它循环:
for product in products['order_row']:
print product['product_reference']
由于:
Traceback (most recent call last):
File "prestapyt_dict.py", line 30, in <module>
print product['product_reference']
TypeError: string indices must be integers, not str
我不知道如何解决它。我唯一想到的是检查字典深度,但我不知道它是否是一个很好的解决方案。
答案 0 :(得分:3)
在三个对象的第一个示例中,您将获得三个词典的列表(注意:在列表中!),因此您可以像平常一样循环遍历每个词典。然而,在第二个例子中,这......
for product in products['order_row']:
转过来......
{'product_id': '6', 'price': '39.000000', 'product_reference': '000001'}
...变成不同的东西。由于它不是列表而且是一个字典,因此您将转入字典而不是列表。您现在正在尝试获取&#39; product_id&#39;的索引,您需要[#s]这样做,因为它是一个字符串(例如,为了获得&#39; r&#39;你需要&#39; product_id&#39; [1])并且您会收到(类型)错误,因为您提供的是字符串。
执行此操作的pythonic方法是期望错误,捕获错误并执行其他操作:
try:
for product in products['order_row']:
print product['product_reference']
except TypeError:
#something else
或者,您可以按照其中一个注释中的建议将字典添加到空列表中,并且for循环将遍历该列表中的整个该项目。