如何将条件应用于列表理解?

时间:2019-03-21 11:25:22

标签: python

我需要做的就是仅获取“美国”来源产品的所有“ id”和“ img_uris”。

这里是我正在使用的数据的粗略样本。

[
  {
    "product_type": "widget",
    "id": "1744556-ghh56h-4633",
    "manufacture_id": "AAB4567",
    "language": "en",
    "store_ids": [
      416835,
      456145
    ],
    "name": "Best Widget",
    "origin": "US",
    "manufactured": "2018-08-26",
    "uri": "https://bobswidgets.com/best_widget",
    "image_uris": {
      "small": "https://bobswidgets.com/small/best_widget_sm.jpg",
      "normal": "https://bobswidgets.com/medium/best_widget_md.jpg",
      "large": "https://bobswidgets.com/large/best_widget_lg.jpg"
    },
    "manufacture_cost": "12.50"
  },
  {
    "product_type": "widget",
    "id": "0956786-dje596-3904",
    "manufacture_id": "BCD13D",
    "language": "en",
    "store_ids": [
      "014329",
      "40123"
    ],
    "name": "Best Widget2",
    "origin": "US",
    "manufactured": "2018-10-03",
    "uri": "https://bobswidgets.com/best_widget_2",
    "image_uris": {
      "small": "https://bobswidgets.com/small/best_widget2_sm.jpg",
      "normal": "https://bobswidgets.com/medium/best_widget2_md.jpg",
      "large": "https://bobswidgets.com/large/best_widget2_lg.jpg"
    },
    "manufacture_cost": "13.33"
  }
]

我正在使用此代码循环遍历json并仅从'img_uris'中提取'id'和'normal'URL。

import ujson as json
import pandas as pd

with open('product.json', 'r') as f:
    json_text = f.read()

prod_dict = json.loads(json_text)
prod_image = [{d['id']: d.get('image_uris', {}).get('normal', 'N/A')} for d in prod_dict]

这很好用,然后我意识到似乎产品数量超出了应有的数量。事实证明,并非所有产品都具有“美国”的“原产地”。我一直在尝试找出如何为列表理解添加条件以仅抓住那些以“美国”为“原产地”而没有运气的人。我发现的大多数示例都非常简单,并且不涉及字典。

我已经尝试过类似的操作,但是它不起作用。

prod_image = [{d['id']: d.get('image_uris', {}).get('normal', 'N/A')} for d in card_dict if d['origin'] = 'US']

1 个答案:

答案 0 :(得分:2)

最后一个块应该可以工作,但是您有一个赋值=而不是布尔值==

prod_image = [{d['id']: d.get('image_uris', {}).get('normal', 'N/A')} for d in card_dict if d['origin'] == 'US']