循环一维字典

时间:2016-01-25 07:15:26

标签: python loops for-loop dictionary

我试图解析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

我不知道如何解决它。我唯一想到的是检查字典深度,但我不知道它是否是一个很好的解决方案。

1 个答案:

答案 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循环将遍历该列表中的整个该项目。