【问题标题】:How to Aggregate list of tuples in python?如何在python中聚合元组列表?
【发布时间】:2018-05-01 08:39:46
【问题描述】:

输入- [(0, 48), (0, 1474), (1, 2709), (1, 27), (1, 2)]

输出-[(0, 2), (1, 3)]

通过计算元组中的第一个数字在列表中重复的次数来计算输出。我的限制是我不想使用 Pandas。我已经尝试过collections.Counter(x[0] for x in tuples),但它只给了我一个 [2, 3] 的列表。这是不够的,因为没有办法知道哪个元素发生了 2 次或 3 次。我该怎么做?

【问题讨论】:

  • 只是出于好奇,Pandas 怎么“不是 pythonic”?
  • 另外,这不是groupby 的用途。您可能应该使用collections.Counter
  • @DeepSpace 也许你是对的,但我不能在这里使用 Pandas。业务限制。
  • 请提供输入和预期输出
  • @DeepSpace 输入在图像中。它是在 Pycharm 调试模式下看到的对象值。输出为[(0, 2), (1, 3), (2, 13)]

标签: python


【解决方案1】:

Counter(x[0] for x in tuples) 但它只给了我[2, 3] 的列表

这个观察是错误的。

from collections import Counter

li = [(0, 48), (0, 1474), (1, 2709), (1, 27), (1, 2)]
print(Counter(x[0] for x in li))
# Counter({1: 3, 0: 2})

Counter 总是返回一个字典。要获得所需的输出,您只需按键排序并创建所需的元组(假设这确实是您希望输出的顺序):

from collections import Counter

li = [(0, 48), (0, 1474), (1, 2709), (1, 27), (1, 2)]
counter = Counter(x[0] for x in li)
output = [(k, v) for k, v in sorted(counter.items(), key=lambda tup: tup[0])]
print(output)
# [(0, 2), (1, 3)]

【讨论】:

  • 按键功能看起来是多余的。使用简单的sorted(counter.items()),您将获得相同的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-23
  • 2021-06-16
  • 1970-01-01
  • 2014-08-03
  • 2017-04-26
  • 2015-10-02
  • 2018-07-22
相关资源
最近更新 更多