मान द्वारा काउंटर को कैसे सॉर्ट करें? - अजगर


144

उलटी सूची समझ की सूची समझ के अलावा, क्या मूल्य द्वारा काउंटर को सॉर्ट करने का एक पैथोनिक तरीका है? यदि हां, तो यह इस से भी तेज है:

>>> from collections import Counter
>>> x = Counter({'a':5, 'b':3, 'c':7})
>>> sorted(x)
['a', 'b', 'c']
>>> sorted(x.items())
[('a', 5), ('b', 3), ('c', 7)]
>>> [(l,k) for k,l in sorted([(j,i) for i,j in x.items()])]
[('b', 3), ('a', 5), ('c', 7)]
>>> [(l,k) for k,l in sorted([(j,i) for i,j in x.items()], reverse=True)]
[('c', 7), ('a', 5), ('b', 3)

जवाबों:


251

का प्रयोग करें Counter.most_common()विधि , यह आइटम क्रमित करेंगे आप के लिए :

>>> from collections import Counter
>>> x = Counter({'a':5, 'b':3, 'c':7})
>>> x.most_common()
[('c', 7), ('a', 5), ('b', 3)]

यह संभव सबसे कुशल तरीके से ऐसा करेगा; यदि आप सभी मानों के बजाय एक शीर्ष एन के लिए पूछते हैं, तो एक heapqका उपयोग एक सीधे सॉर्ट के बजाय किया जाता है:

>>> x.most_common(1)
[('c', 7)]

काउंटरों के बाहर, छँटाई को हमेशा एक keyफ़ंक्शन के आधार पर समायोजित किया जा सकता है ; .sort()और sorted()दोनों कॉल करने योग्य लेते हैं जो आपको इनपुट अनुक्रम को सॉर्ट करने के लिए एक मान निर्दिष्ट करते हैं; sorted(x, key=x.get, reverse=True)आप के रूप में एक ही छँटाई देना होगा x.most_common(), लेकिन केवल उदाहरण के लिए चाबियाँ वापस:

>>> sorted(x, key=x.get, reverse=True)
['c', 'a', 'b']

या आप केवल दिए गए मानों के आधार पर छाँट सकते हैं (key, value):

>>> sorted(x.items(), key=lambda pair: pair[1], reverse=True)
[('c', 7), ('a', 5), ('b', 3)]

देखें अजगर howto छँटाई अधिक जानकारी के लिए।


30

करने के लिए एक नहीं बल्कि अच्छा इसके अलावा @MartijnPieters जवाब एक वापस पाने के लिए है शब्दकोश घटना के अनुसार क्रमबद्ध के बाद से Collections.most_commonकेवल एक टपल देता है। मैं अक्सर इसे आसान लॉग फ़ाइलों के लिए एक json आउटपुट के साथ देता हूं:

from collections import Counter, OrderedDict

x = Counter({'a':5, 'b':3, 'c':7})
y = OrderedDict(x.most_common())

आउटपुट के साथ:

OrderedDict([('c', 7), ('a', 5), ('b', 3)])
{
  "c": 7, 
  "a": 5, 
  "b": 3
}

10

हाँ:

>>> from collections import Counter
>>> x = Counter({'a':5, 'b':3, 'c':7})

सॉर्ट की गई कीवर्ड कुंजी और लैम्बडा फ़ंक्शन का उपयोग करना:

>>> sorted(x.items(), key=lambda i: i[1])
[('b', 3), ('a', 5), ('c', 7)]
>>> sorted(x.items(), key=lambda i: i[1], reverse=True)
[('c', 7), ('a', 5), ('b', 3)]

यह सभी शब्दकोशों के लिए काम करता है। हालांकि Counterएक विशेष कार्य है जो पहले से ही आपको क्रमबद्ध आइटम (सबसे अधिक बार, कम से कम लगातार) देता है। इसे कहा जाता है most_common():

>>> x.most_common()
[('c', 7), ('a', 5), ('b', 3)]
>>> list(reversed(x.most_common()))  # in order of least to most
[('b', 3), ('a', 5), ('c', 7)]

आप यह भी निर्दिष्ट कर सकते हैं कि आप कितने आइटम देखना चाहते हैं:

>>> x.most_common(2)  # specify number you want
[('c', 7), ('a', 5)]

सॉर्ट करने के लिए एक और तरीका है कि आप फंक्शन को सेट करेंlamda i: -i[1]
स्टीनर लीमा

4

सामान्य रूप से सॉर्ट किया गया, जहां keyकीवर्ड सॉर्टिंग विधि को परिभाषित करता है, संख्यात्मक प्रकार से पहले माइनस अवरोही इंगित करता है:

>>> x = Counter({'a':5, 'b':3, 'c':7})
>>> sorted(x.items(), key=lambda k: -k[1])  # Ascending
[('c', 7), ('a', 5), ('b', 3)]

2
keyकीवर्ड छँटाई विधि को परिभाषित करता है, शून्य से संख्यात्मक प्रकार से पहले उतरते संकेत मिलता
एलेक्स सीवन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.