循环一维字典

2024-04-27 00:41:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试解析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

我不知道怎么解决它。我唯一想到的是查字典的深度,但我不知道这是不是一个好办法。你知道吗


Tags: in订单apiidforgetorderproduct
1条回答
网友
1楼 · 发布于 2024-04-27 00:41:44

在这三个对象的第一个示例中,您将看到三个字典的列表(注意:在列表中!)所以你可以像平常一样循环浏览每一本字典。然而,在第二个例子中,这个。。。你知道吗

for product in products['order_row']:

把这个。。。你知道吗

{'product_id': '6', 'price': '39.000000', 'product_reference': '000001'}

。。。变成不同的东西。因为它不是一个列表,而是一本字典,所以你要进入字典而不是列表。您现在正在尝试获取“product#id”的索引,这需要[#s]来完成,因为它是一个字符串(例如,要获取“r”,您需要“product#id”[1]),并且由于您提供了一个字符串,因此出现了(Type)错误。你知道吗

pythonic的方法是预期错误,捕捉错误并做其他事情:

try:
    for product in products['order_row']:
        print product['product_reference']
except TypeError:
    #something else

或者,您可以按照其中一个注释中的建议将字典添加到空列表中,for循环将在该列表上循环该项的全部内容。你知道吗

相关问题 更多 >