2

一部の要素が重複しているリストがあります。そして、他の複製された要素に基づいていくつかの要素を組み合わせる必要があります。

入力例:

[
('Sig: 7126', '10.3.5.0', 4),
('Sig: 7126', '10.3.5.0', 1),
('Sig: 7126', '10.3.5.0', 1),
('Sig: 3326', '10.3.5.0', 7),
('Sig: 7126', '10.3.5.1', 3),
('Sig: 7126', '10.3.5.1', 1),
('Sig: 7126', '10.3.5.2', 5),
('Sig: 7126', '10.3.5.2', 1),
('Sig: 7126', '10.3.5.4', 2),
('Sig: 7126', '10.3.5.4', 1),
('Sig: 7126', '10.3.5.4', 1),
('Sig: 7126', '10.3.5.4', 1),
('Sig: 0559', '10.3.5.34', 1),
('Sig: 7126', '10.3.5.34', 1),
('Sig: 7126', '10.3.5.34', 1),
('Sig: 0559', '10.3.5.42', 1),
('Sig: 7126', '10.3.5.42', 1),
('Sig: 7126', '10.3.5.43', 2)
]

目標は次のようなものです。

[
('Sig: 7126', '10.3.5.0', 6),
('Sig: 3326', '10.3.5.0', 7),
('Sig: 7126', '10.3.5.1', 4),
('Sig: 7126', '10.3.5.2', 6),
('Sig: 7126', '10.3.5.4', 5),
('Sig: 0559', '10.3.5.34', 1),
('Sig: 7126', '10.3.5.34', 2),
('Sig: 0559', '10.3.5.42', 1),
('Sig: 7126', '10.3.5.42', 1),
('Sig: 7126', '10.3.5.43', 2)
]

それを達成するための簡単なpythonコードはありますか?

4

2 に答える 2

1

itertools.groupby:

 from itertools import groupby

l = [('Sig: 7126', '10.3.5.0', '4'), ('Sig: 7126', '10.3.5.0', '1')...]

def tuples_sum(iterable):
  return list(iterable[0][:-1]) + [sum(int(i[-1]) for i in iterable)]

for i, j in groupby(l, lambda x: (x[0], x[1])):
  print(tuples_sum(list(j)))

これは次を与えます:

['Sig: 7126', '10.3.5.0', 6]
['Sig: 3326', '10.3.5.0', 7]
['Sig: 7126', '10.3.5.1', 4]
['Sig: 7126', '10.3.5.2', 6]
['Sig: 7126', '10.3.5.4', 5]
['Sig: 0559', '10.3.5.34', 1]
['Sig: 7126', '10.3.5.34', 2]
['Sig: 0559', '10.3.5.42', 1]
['Sig: 7126', '10.3.5.42', 1]
['Sig: 7126', '10.3.5.43', 2]
于 2013-04-21T18:41:22.907 に答える
1

最初の 2 つの列でグループ化するとします。

import itertools

grouping = itertools.groupby(data, key=lambda i: (i[0], i[1]))
summer = lambda group: sum(i[2] for i in group))
result = [(a, b, summer(group)) for (a, b), group in grouping]

入力がグループ化キーでソートされていない場合は、最初にソートする必要があります。

import itertools

grouper = lambda item: (item[0], item[1])
data.sort(key=grouper)
grouping = itertools.groupby(data, key=grouper)

summer = lambda group: sum(i[2] for i in group)

result = [(a, b, summer(group)) for (a, b), group in grouping]
于 2013-04-21T18:45:50.907 に答える