Накопить значения в списке кортежей [python] [duplicate]

Попробуйте что-то подобное onclick = "return self.close ()"

10
задан Martijn Pieters 15 June 2012 в 21:49
поделиться

3 ответа

>>> [(x[0:2] + (sum(z[2] for z in y),) + x[2:5]) for (x, y) in
      itertools.groupby(sorted(L, key=operator.itemgetter(0, 1, 3, 4)),
      key=operator.itemgetter(0, 1, 3, 4))]
[
  ('A', '', Decimal('21.0000000000'), 1330, datetime.datetime(2012, 5, 14, 0, 0)),
  ('A', '', Decimal('4.0000000000'), 1330, datetime.datetime(2012, 6, 8, 0, 0)),
  ('AA', 'C', Decimal('31.0000000000'), 1330, datetime.datetime(2012, 5, 31, 0, 0)),
  ('B', '', Decimal('7.0000000000'), 1330, datetime.datetime(2012, 5, 24, 0, 0)),
  ('B', '', Decimal('31.0000000000'), 1330, datetime.datetime(2012, 6, 4, 0, 0))
]

(ПРИМЕЧАНИЕ: выход переформатирован)

6
ответ дан Ignacio Vazquez-Abrams 18 August 2018 в 23:47
поделиться

Если вы обнаружите, что делаете это очень много с большими наборами данных, вам может потребоваться посмотреть библиотеку pandas , в которой есть много хороших возможностей для такого рода вещей.

1
ответ дан BrenBarn 18 August 2018 в 23:47
поделиться

Вы хотите itertools.groupby .

Обратите внимание, что groupby ожидает, что вход будет отсортирован, поэтому вам может понадобиться сделать это перед рукой:

keyfunc = lambda t: (t[0], t[1], t[3], t[4])
data.sort(key=keyfunc)
for key, rows in itertools.groupby(data, keyfunc):
    print key, sum(r[2] for r in rows)
12
ответ дан David Wolever 18 August 2018 в 23:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: