Google API 响应数据:计算字典列表中出现次数最多的字典值

Google API Response Data: Count most frequent dictionary values from list of dictionaries

我有一个 Python 脚本 (Python 3.7) 可以访问 Google Sheet 并使用 sheet 获取所有数据get_all_records() 来自 gspread 库的方法。

响应数据是字典列表,google sheet 中的每一行表示为它自己的字典,key/value 对表示为列 header 和行值分别像这样:

[{'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' 键中值在所有词典中的出现频率。

在上面的示例中,key-value 对 'Bet': 'BTTS' 最常见的 'Home Team' 值是 Everton

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

sheet 上的数据是通过 Google 表格收集的,因此我可以确保所捕获数据的完整性,因为该表格只允许从预定义的 [=41] 中选择值=] 或单选按钮。

在 modules/techniques 上提供正确方向的建议或指示以帮助我在这里将不胜感激。

我不熟悉 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]

这可以通过许多其他方法来实现,有些方法比我的方法更优雅、更简短。我想在这里做的是一个易于阅读的代码,一步一步。