2010-03-18 5 views
5

मैं इस सूची के लिए इसी तरह तार की एक सूची है:मैं अपने पहले चरित्र द्वारा तारों की एक सूची को समूहित करने के लिए पायथन itertools.groupby() का उपयोग कैसे कर सकता हूं?

tags = ('apples', 'apricots', 'oranges', 'pears', 'peaches') 

मैं प्रत्येक स्ट्रिंग में पहले वर्ण से इस सूची समूहीकरण itertools.groupby का उपयोग कर के बारे में जाना कैसे करना चाहिए()? Iertools.groupby() द्वारा आवश्यक 'कुंजी' तर्क की आपूर्ति कैसे करनी चाहिए?

उत्तर

12
groupby(sorted(tags), key=operator.itemgetter(0)) 
+0

यह यूनिकोड के लिए काम करता है? –

+1

यह यूनिकोड पर काम करता है। यदि आप पूछ रहे हैं कि यह यूटीएफ -8 तारों पर काम करता है, तो आपको इसके बारे में पूछना चाहिए कि आपको इसे यूनिकोड में कब डीकोड करना चाहिए। जवाब, ज़ाहिर है, जैसे ही यह आता है। –

+0

धन्यवाद, यह अपेक्षा के अनुसार काम करता है। मेरे पास कई भाषाओं में टैग की एक सूची है और मैं विभिन्न अनुवादकों के साथ ऑर्डरिंग का परीक्षण करूँगा। –

5
>>> for i, j in itertools.groupby(tags, key=lambda x: x[0]): 
    print(i, list(j)) 


a ['apples', 'apricots'] 
o ['oranges'] 
p ['pears', 'peaches'] 
0

सिर्फ एक और तरीका है,

>>> from collections import defaultdict 
>>> t=defaultdict(list) 
>>> for items in tags: 
...  t[items[0]].append(items) 
... 
>>> t 
defaultdict(<type 'list'>, {'a': ['apples', 'apricots'], 'p': ['pears', 'peaches'], 'o': ['oranges']}) 
9

आप बाद में dict बनाने के लिए चाहते हो सकता है:

from itertools import groupby 

d = {k: list(v) for k, v in groupby(tags, key=lambda x: x[0])} 
संबंधित मुद्दे

 संबंधित मुद्दे