Google API响应数据:从词典列表中计算最常用的词典值

问题描述 投票:0回答:1

我有一个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表单收集的,因此我可以确保捕获的数据的完整性,因为表单仅允许从预定义的下拉列表或单选按钮中选择值。

对于在模块/技术上向我提供帮助的正确建议或指导,将不胜感激。

python python-3.7 google-sheets-api
1个回答
0
投票

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

这可以通过许多其他方法来实现,其中一些方法比我的方法更优雅,更快捷。我想在这里做的是一个易于阅读的代码,它会逐步进行。

© www.soinside.com 2019 - 2024. All rights reserved.