उपयोग itertools.groupby:
[list(group) for key,group in itertools.groupby(data,operator.itemgetter(1))]
:
import itertools
import operator
data=[(1, 'A', 'foo'),
(2, 'A', 'bar'),
(100, 'A', 'foo-bar'),
('xx', 'B', 'foobar'),
('yy', 'B', 'foo'),
(1000, 'C', 'py'),
(200, 'C', 'foo'),
]
for key,group in itertools.groupby(data,operator.itemgetter(1)):
print(list(group))
पैदावार
[(1, 'A', 'foo'), (2, 'A', 'bar'), (100, 'A', 'foo-bar')]
[('xx', 'B', 'foobar'), ('yy', 'B', 'foo')]
[(1000, 'C', 'py'), (200, 'C', 'foo')]
या, एक sublist के रूप में प्रत्येक समूह के साथ एक सूची बनाने के लिए, आप एक सूची समझ इस्तेमाल कर सकते हैं
सेको itertools.groupby
पर nd तर्क एक फ़ंक्शन है जो itertools.groupby
data
(पहला तर्क) में प्रत्येक आइटम पर लागू होता है। यह key
वापस करने की उम्मीद है। itertools.groupby
फिर उसी key
के साथ सभी संगत वस्तुओं को एक साथ समूहित करता है।
operator.itemgetter(1) अनुक्रम में दूसरे आइटम को चुनता है।
उदाहरण के लिए
, अगर
row=(1, 'A', 'foo')
तो
operator.itemgetter(1)(row)
'A'
बराबर होती है।
@eryksun टिप्पणी में बताते हैं के रूप में, यदि tuples की श्रेणियों कुछ यादृच्छिक क्रम में दिखाई देते हैं, तो आप data
पहले itertools.groupby
लागू करने से पहले सॉर्ट करना होगा। ऐसा इसलिए है क्योंकि itertools.groupy
केवल संगत आइटम समूह में समान कुंजी के साथ एकत्र करता है।
श्रेणी के द्वारा tuples क्रमबद्ध करने के लिए, का उपयोग करें:
data2=sorted(data,key=operator.itemgetter(1))
[संभावित उप-सूचियों को नए उप-सूचियों में छंटनी?] के संभावित डुप्लिकेट? (Http://stackoverflow.com/questions/71140 38/सॉर्टिंग-सब-सूचियों-इन-न्यू-सब-सूचियां) – agf