我刮到了一个博彩网站API。删除这个API返回了JSON,它本质上是一个字典列表。我正在努力搜索这个字典列表,并返回特定的赌注和赔率。以下是我的代码:
Team1 = 'Lechia Gdańsk'
Team2 = 'Sokół Ostróda'
WDW = [{'id': 2853153615, 'label': '1', 'englishLabel': '1', 'odds': 1250, 'participant': 'Lechia Gdańsk', 'type': 'OT_ONE', 'betOfferId': 2244628386, 'changedDate': '2021-01-14T18:52:07Z', 'participantId': 1000020086, 'oddsFractional': '1/4', 'oddsAmerican': '-400', 'status': 'OPEN', 'cashOutStatus': 'ENABLED'}, {'id': 2853153626, 'label': 'X', 'englishLabel': 'X', 'odds': 5750, 'type': 'OT_CROSS', 'betOfferId': 2244628386, 'changedDate': '2021-01-14T18:52:07Z', 'oddsFractional': '19/4', 'oddsAmerican': '475', 'status': 'OPEN', 'cashOutStatus': 'ENABLED'}, {'id': 2853153638, 'label': '2', 'englishLabel': '2', 'odds': 7000, 'participant': 'Sokół Ostróda', 'type': 'OT_TWO', 'betOfferId': 2244628386, 'changedDate': '2021-01-14T18:52:07Z', 'participantId': 1001302448, 'oddsFractional': '6/1', 'oddsAmerican': '600', 'status': 'OPEN', 'cashOutStatus': 'ENABLED'}]
unisoccerWDWTeam1 = next((item['odds']/1000 for item in WDW if item['participant'] == Team1), None)
unisoccerWDWTeam2 = next((item['odds']/1000 for item in WDW if item['participant'] == Team2), None)
unisoccerWDWDraw = next((item['odds']/1000 for item in WDW if item['label'] == 'X'), None)
我使用next((和字典理解来搜索匹配的团队名称,然后从字典列表中返回赔率。问题是字典在列表中不统一,所以当我的代码遇到一个没有关键字的字典时,它会返回一个错误。在这种情况下,WDW[1]在字典中没有"参与者"。有没有办法避免这个问题,或者跳过不包含我正在搜索的Key:Value对的词典?我正在考虑简单地编写嵌套for循环,也许使用try-except块来避免这种情况,但这似乎是一个缓慢而不雅的解决方案。如有任何建议或帮助,我们将不胜感激。
为了简单地避免异常,您可以使用item.get('participant'(,如果"参与者";不存在,而不是引发异常。(这类似于您在下一次调用时使用的无默认值。
根据您实现循环的方式,这应该允许您静默地跳过不包含您要查找的键的字典。
这将类似于:
unisoccerWDWTeam1 = next((item['odds']/1000 for item in WDW if item.get('participant') == Team1), None)
代码未经过测试,但应该可以让您开始使用。