【问题标题】:Creating a loop for list of dictionaries为字典列表创建循环
【发布时间】:2020-07-14 08:22:02
【问题描述】:

如何创建一个循环,循环遍历 "productType":"WIN_ODDS_BSP" 的“价格”。

以下是 JSON 的示例:

"runners":[{"selectionId":"24369070",
            "runnerName":"Bloomin Crafty",
            "barrierNo":3,
            "saddleClothNo":1,
            "placedResult":2,
            "startingPosition":1,
            "trainerName":"Kathryn Durden",
            "jockeyName":"Jarrod Fry",
            "weight":58.0,
            "silkColor":"Hot Pink Royal Blue Horseshoe Hot Pink Royal Blue \u0026 White Checked Sleeves \u0026 Cap",
            "colorURL":"c20200713MURT/1364572.png",
            "bestTote":10.4,
            "markets":[{"productType":"WIN_ODDS_BSP",
                        "price":10.09,
                        "reductionFactor":8.33,
                       {"productType":"PLACE_ODDS_BSP",
                        "price":2.92,
                        "reductionFactor":13.85
                       }],
            "bestNZTote":0}]

这是我的代码,一直到最后一行:

for marketid in marketids:
    request2 = requests.get(f'https://betfair-data-supplier-prod.herokuapp.com/api/race_results/?market_id=1.{marketid}&nz_tote_event_id=',
    headers={'User-Agent': 'Mozilla/5.0'})
    json2 = request2.json()
    for runner in json2['runners']:
        for market in runner['markets']:
            if market['productType'] in ['WIN_ODDS_BSP']:
                for p in market['price']:

【问题讨论】:

  • 我猜 p 是一个字段,而不是一个表格。
  • market['price'] 不是一个列表,你为什么在这里使用循环?你可以像market.get(productType) == 'WIN_ODDS_BSP'这样更改你的if语句,然后你可以使用market['price']访问价格

标签: python pandas loops for-loop


【解决方案1】:

以下代码将从markets 键中提取价格作为列表,然后您可以决定如何处理该列表:

for runner in json2['runners']:
    prices = [p.get('price') for p in runner.get('markets') if p.get('productType') == 'WIN_ODDS_BSP']

prices

输出:

[10.09]

【讨论】:

    【解决方案2】:

    您需要更改代码行:

    if market['productType'] in ['WIN_ODDS_BSP']
    

    你的代码-sn-p 到:

    if market['productType'] == 'WIN_ODDS_BSP'
    

    这可以帮助您过滤产品WIN_ODDS_BSP的对象 过滤后,您可以通过以下方式访问价格:

    market['price']
    

    这个市场['price'] 给你浮动价值而不是一个列表。所以你不能在那里使用 for 循环(代码中的最后一行-sn-p):

    for p in market['price']
    

    如果您希望将 market['price'] 的值存储在 'p' 变量中,那么您正在寻找下面的 code-sn-p:

    for market in runner['markets']:
      if market['productType'] == 'WIN_ODDS_BSP':
        p = market['price']:
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-18
      • 2018-12-04
      • 2022-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多