Group List Of Tuples By Item
I have this list as example: [(148, Decimal('3.0')), (325, Decimal('3.0')), (148, Decimal('2.0')), (183, Decimal('1.0')), (308, Decimal('1.0')), (530, Decimal('1.0')), (594, Decima
Solution 1:
You would first need to sort the data for the groupby to work, it groups consecutive elements based on the key you provide:
import operator, itertools
fromdecimal import *
test=[(148, Decimal('3.0')), (325, Decimal('3.0')), (148, Decimal('2.0')), (183, Decimal('1.0')), (308, Decimal('1.0')), (530, Decimal('1.0')), (594, Decimal('1.0')), (686, Decimal('1.0')), (756, Decimal('1.0')), (806, Decimal('1.0'))]
for _k, data in itertools.groupby(sorted(test), operator.itemgetter(0)):
print list(data)
But you would be better using a dict to group to avoid an unnecessary O(n log n) sort:
from collections import defaultdict
d = defaultdict(list)
for t in test:
d[t[0]].append(t)
for v in d.values():
print(v)
Both would give you the same groupings, just not necessarily in the same order.
Solution 2:
itertools.groupby()
requires the data to be consistent or sorted.
[(148, Decimal('3.0')), (148, Decimal('2.0')), (325, Decimal('3.0'))]
will work but [(148, Decimal('3.0')), (325, Decimal('3.0')), (148, Decimal('2.0'))]
will not as the id is 148, 325, 148
instead of 148, 148, 325
.
Post a Comment for "Group List Of Tuples By Item"