Google API响应数据:统计字典列表中最频繁的字典值



我有一个Python脚本(Python 3.7(,它访问Google工作表,并使用gspread库中的get_all_records()方法从工作表中获取所有数据。

响应数据是一个字典列表,谷歌工作表中的每一行都表示为自己的字典,键/值对分别表示为列标题和行值,如下所示:

[{'Away Team': 'Gillingham',
'Bet': 'Over 2.5 Goals',
'Home Team': 'AFC Wimbledon',
'Timestamp': '10/17/2019 10:36:01'},
{'Away Team': 'Liverpool',
'Bet': 'Home Win',
'Home Team': 'Man United',
'Timestamp': '10/18/2019 22:59:18'},
{'Away Team': 'Newcastle',
'Bet': 'BTTS',
'Home Team': 'Arsenal',
'Timestamp': '10/18/2019 22:59:31'},
{'Away Team': 'Man City',
'Bet': 'BTTS',
'Home Team': 'Everton',
'Timestamp': '10/20/2019 20:29:45'},
{'Away Team': 'Man City',
'Bet': 'BTTS',
'Home Team': 'Everton',
'Timestamp': '10/20/2019 20:29:52'},
{'Away Team': 'Man City',
'Bet': 'BTTS',
'Home Team': 'Everton',
'Timestamp': '10/20/2019 20:30:00'},
{'Away Team': 'Man City',
'Bet': 'BTTS',
'Home Team': 'Everton',
'Timestamp': '10/20/2019 20:30:02'},
{'Away Team': 'Newcastle',
'Bet': 'BTTS',
'Home Team': 'Arsenal',
'Timestamp': '10/18/2019 22:59:31'}]

'Bet'键的值可以是8个值中的1个。对于每个唯一的值,我想计算所有字典中'Home Team'键中值的频率。

在上面的例子中,键值对'Bet': 'BTTS'最频繁的'Home Team'值是Everton

我尝试使用collections模块中的default dictionary为每个唯一的'Bet'键值创建新的字典,但我很快意识到,我只能创建以'Home Team'值为键、以'Bet'值为值的新字典,但无法捕获频率。

表格上的数据是通过谷歌表格收集的,因此我可以确保所捕获数据的完整性,因为表格只允许从预定义的下拉列表或单选按钮中选择值。

如果能在模块/技术方面为我提供一些正确的建议或指导,我将不胜感激。

我不熟悉collections模块,但使用老式的纯Python确实很容易实现。

假设您的字典列表存储在一个名为raw_dicts的变量中。请允许我建议将其解析为一个更方便的数据结构,用于我们的任务:

parsed_dict = dict()
for dictionary in raw_dicts:
bet = dictionary['Bet']
if bet not in parsed_dict.keys():
parsed_dict[bet] = dict()
if dictionary['Home Team'] not in parsed_dict[bet].keys():
parsed_dict[bet][dictionary['Home Team']] = 0
parsed_dict[bet][dictionary['Home Team']] += 1

我在这里所做的是为每一对赌注团队创建一个计数器。我们有一本漂亮的字典:

{
"Over 2.5 Goals": {
"AFC Wimbledon": 1
}, 
"Home Win": {
"Man United": 1
}, 
"BTTS": {
"Everton": 4, 
"Arsenal": 2
}
}

既然我们有了这么好的字典,我们只剩下一个简单的最大化问题,它的解决方案是教科书上的:

most_frequent_bet = ""
most_frequent_team = ""
highest_frequency = 0
for bet in parsed_dict.keys():
for team in parsed_dict[bet].keys():
if parsed_dict[bet][team] > highest_frequency:
most_frequent_bet = bet
most_frequent_team = team
highest_frequency = parsed_dict[bet][team]

这可以通过任何其他方法来实现,有些方法比我的方法更优雅、更短。我想在这里做的是一个易于阅读的循序渐进的代码。

最新更新