我有一个Python脚本(Python 3.7),该脚本访问Google表格并使用get_all_records()
库中的gspread
方法从该表格中获取所有数据。
响应数据是一个字典列表,来自Google工作表的每一行都表示为它自己的字典,而键/值对分别作为列标题和行值,如下所示:
[{'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'
键中值的频率。
在上面的示例中,键值对'Home Team'
的最频繁的'Bet': 'BTTS'
值是埃弗顿
[我尝试使用'Bet'
模块中的default dictionary
为每个collections
唯一键值创建新字典,但我很快意识到我只能用'Home Team'
值作为键并带有'Bet'
值来创建新字典。作为值,但我随后无法捕获频率。
工作表上的数据是通过Google表单收集的,因此我可以确保捕获的数据的完整性,因为表单仅允许从预定义的下拉列表或单选按钮中选择值。
对于在模块/技术上向我提供帮助的正确建议或指导,将不胜感激。
我不熟悉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
这可以通过许多其他方法来实现,其中一些方法比我的方法更优雅,更快捷。我想在这里做的是一个易于阅读的代码,它会逐步进行。