【问题标题】:Get a sum of values inside a dictionary获取字典中的值的总和
【发布时间】:2019-09-18 13:38:18
【问题描述】:

我有一本字典,其中键是国家名称,值是两个或 1 个数字的列表。我需要以字典的形式获取这两个值的总和,其中键是国家/地区,值是总和。

我尝试过使用 sum(),但我收到一个错误,指出只能将列表(而不是“int”)连接到列表。

country_home = sorted(Counter(data['home_team']).most_common()) # gives back ('America', 18)
country_away = sorted(Counter(data['away_team']).most_common()) # gives back ('America', 10)

        country_away = sorted(Counter(data['away_team']).most_common())
        d = defaultdict(list)
        for a, b in country_home + country_away:
            d[a].append(b)
        print(d) # gives back {'America': [18, 10], 'Canada': [37, 65], 'Mexico: [10], ...}

预期结果是列表或字典

{'America': [28], 'Canada': [102], ... }

【问题讨论】:

  • 你能分享一个输入样本吗?
  • 输入是一个 CSV 文件,其中 A 列是国家名称,B 列也是国家名称。我需要添加在 A 和 B 列中提及国家名称的次数。背景 - A 列国足主场比赛的国名和 B 列国足客场比赛的国名 - 目标是计算每个国家总共踢了多少场比赛。
  • 好吧,如果你使用 pandas 加载它,无论如何都分享一个示例。请查看如何提供minimal, Complete, and Verifiable example
  • 你应该可以只添加两个Counter 实例

标签: python list


【解决方案1】:

只需对您的代码进行最少的更改,以下应该可以工作。

     country_away = sorted(Counter(data['away_team']).most_common())
        d = defaultdict(list)
        for a, b in country_home + country_away:
            d[a].append(b)
            d[a] = [sum(d[a])] # sum up the list
        print(d) # should give back {'America': [28], 'Canada': [102], 'Mexico': [10]...}

这是你想做的吗?

干杯

【讨论】:

  • 不客气! :) 如果您也可以接受答案,以防您认为它解决了您的问题,那就太好了。
【解决方案2】:

你为什么不这样做:

Counter(data['home_team'] + data['away_team']).most_common()

例子:

from collections import Counter, OrderedDict
data = {
    'home_team': 'America America  America  America America America Canada'.split(),
    'away_team': 'America America  America  America America America Canada'.split()
}

print(OrderedDict(Counter(data['home_team'] + data['away_team']).most_common()))

输出:

OrderedDict([('America', 12), ('Canada', 2)])

如果您不关心订单,请使用dict(..) 而不是OrderedDict(..)

或者你可以这样做:

  print(dict((Counter(data['home_team'])+ Counter(data['away_team'])).most_common()))

【讨论】:

    【解决方案3】:

    在不损害原始字典的情况下,您可以尝试:

    a = {'America':[18,20],'Canada':[37,65],'c':[4,5,6]}
    b = {x:a[x] for x in a}
    b = {x : [] for x in b}
    for i in a:
        b[i].append(sum(a[i]))
    print(b)
    

    输出:

    {'America': [38], 'Canada': [102], 'c': [15]}
    

    这样,每当向第一个字典添加新键时,它就会被添加到字典b

    【讨论】:

      【解决方案4】:

      您可以使用字典理解来处理字典

      d = {'America':[18,20],'Canada':[37,65],'c':[4,5,6]}
      res = {k:[sum(v)] for k,v in d.items()}
      print(res)
      

      输出:

      {'America': [38], 'Canada': [102], 'c': [15]}
      

      【讨论】:

        猜你喜欢
        • 2012-05-23
        • 2021-02-05
        • 2019-01-16
        • 2012-07-26
        • 1970-01-01
        • 2021-01-16
        • 2016-05-28
        • 2015-12-19
        • 2018-11-19
        相关资源
        最近更新 更多