【问题标题】:Python calculations in two groups两组 Python 计算
【发布时间】:2016-04-19 17:45:04
【问题描述】:

我有以下两个列表:

          level = ["a","b","a","c"]
          Number = [1,2,1,2]

我只是想知道是否可以使用 Python 计算列表级别中每个元素的总和。所以输出将是两个新列表 x 和 y:

          x = ["a", "b","c"]
          y = [2,2,2]  (e.g: the total Number for "a" is 1+1=2, etc)

【问题讨论】:

  • 你可以用Python来做这个,你试过什么?
  • 在这种情况下你的y 应该是[2, 1, 1] 吗?
  • 请根据@SnehalShekatkar 编辑您的问题,以免混淆想要帮助您的会员
  • @SnehalShekatkar 谢谢提问!实际上它是 [2,2,2] 因为它们是列表频率中数字的总和,这有点令人困惑,因为它们不是列表级别中每个元素的实际“频率”,我正在尝试分组按列表频率中的数字。
  • @BillalBEGUERADJ 谢谢提醒!我只是将其更改为数字而不是“频率”,我想这不那么令人困惑。

标签: python list python-2.7 python-3.x


【解决方案1】:

一种方法是使用defaultdict:

from collections import defaultdict
d = defaultdict(int)
for k,v in zip(level, frequency):
    d[k] += v

另一种方法是使用Counter

from collections import Counter
import itertools
d = Counter(itertools.chain.from_iterable(map(itertools.repeat, level, frequency)))

在这两种方式中,您都可以将其解压缩为 2 个列表,如下所示:

x, y = zip(*d.items())

【讨论】:

    【解决方案2】:

    您必须为它们创建键映射。

    在下面的代码中,我创建了带有映射的字典。并检查,如果您的level 不存在于dict 中,则将您的frequency0 相加,否则与最后计算的frequency 相加。

    >>> level = ["a","b","a","c"]
    >>> frequency = [1,2,1,2]
    >>> my_dict = {}
    >>> for (l, f) in zip(level, frequency):
    ...     my_dict[l] = my_dict.get(l, 0) + f
    ... 
    >>> print my_dict
    {'a': 2, 'c': 2, 'b': 2}
    >>> print my_dict.values()
    [2, 2, 2]
    >>> print my_dict.keys()
    ['a', 'c', 'b']
    

    【讨论】:

      【解决方案3】:

      如果您不关心x 中的顺序,您可以使用defaultdict,尽管我确信有更实用的方法来做到这一点

      from collections import defaultdict
      defdic = defaultdict(int)
      for letter, frequency in zip(level, frequency):
          defdic[letter] += frequency
      
      x,y = list(defdic.keys()), list(defdic.values())
      
      # or better yet as proposed by Bharel
      x, y = zip(*defdic.items())
      

      输出

      >>> x 
      ['a', 'b', 'c']
      >>> y 
      [2, 2, 2]
      

      【讨论】:

      • 谢谢!我不关心 X 的顺序,实际上我正在测试你的代码,并且 x 自动按字母顺序排列(我不知道为什么,)但是请注意!
      • x 不会自动排序,它会随着字典不保持顺序而改变,请注意。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-21
      • 2014-12-04
      • 2015-01-27
      • 1970-01-01
      • 2017-12-23
      • 1970-01-01
      相关资源
      最近更新 更多