【问题标题】:Google API Response Data: Count most frequent dictionary values from list of dictionariesGoogle API 响应数据:从字典列表中计算最常见的字典值
【发布时间】:2019-10-23 14:12:49
【问题描述】:

我有一个 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' 值是埃弗顿

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

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

我们将不胜感激有关模块/技术的一些正确方向的建议或指示,以帮助我。

【问题讨论】:

    标签: python python-3.7


    【解决方案1】:

    我不熟悉集合模块,但使用老式的纯 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]
    

    这可以通过任何数量的其他方法来实现,其中一些比我的更优雅和简短。我想在这里做的是一个易于阅读的代码,逐步进行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      • 2020-07-19
      相关资源
      最近更新 更多