【问题标题】:Loop one dimension dictionary循环一维字典
【发布时间】:2016-05-01 10:22:13
【问题描述】:

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

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

【问题讨论】:

  • 产品['product_reference']出了什么问题?
  • 如果响应 obj 的类型是 dict,为什么不将其添加到空列表中?迭代按预期工作
  • 检查数据类型 -isinstance(..., list)isinstance(..., dict) 做不同的事情。

标签: python loops for-loop dictionary


【解决方案1】:

在三个对象的第一个示例中,您将获得一个包含三个字典的列表(注意:在列表中!),因此您可以像往常一样遍历每个字典。然而,在第二个例子中,这...

for product in products['order_row']:

转这个...

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

...变成不同的东西。因为它不是一个列表,而是一本字典,所以您将进入字典,而不是进入列表。您现在正在尝试获取“product_id”的索引,您需要 [#s] 来执行此操作,因为它是一个字符串(例如,要获取 'r',您需要 'product_id'[1])并且您获得了(类型)错误,因为您提供了一个字符串。

执行此操作的 Pythonic 方法是预期错误,捕获它并执行其他操作:

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

或者,您可以按照其中一个 cmets 中的建议将字典添加到一个空列表中,并且您的 for 循环将遍历该列表以获取该项目的全部内容。

【讨论】:

  • 谢谢!使用列表的解决方案:if not isinstance(products, list): products = [products] for product in products: print product['product_reference'] 或使用 try 和 except:try: for product in products: print product['product_reference'] except TypeError: print products['product_reference']
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-10
  • 2020-02-20
  • 2021-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-17
相关资源
最近更新 更多