In python, how do I take the highest occurrence of something in a list, and sort it that way?

后端 未结 5 1957
别那么骄傲
别那么骄傲 2021-01-19 06:20
[3, 3, 3, 4, 4, 2]

Would be:

[ (3, 3), (4, 2), (2, 1) ]

The output should be sorted by highest count first to low

相关标签:
5条回答
  • 2021-01-19 06:21
    data = [3, 3, 3, 4, 4, 2]
    result = []
    for entry in set(data):
        result.append((entry, data.count(entry)))
    result.sort(key = lambda x: -x[1])
    print result
    
    >>[(3, 3), (4, 2), (2, 1)]
    
    0 讨论(0)
  • 2021-01-19 06:30
    def myfun(x,y):
        return x[1]-y[1]
    
    list1 = [3, 3, 3, 4, 4, 2]
    s1 = set(list1)
    newlist = []
    for e in s1:
        newlist.append((e,list1.count(e)))
    print sorted(newlist,cmp=myfun)
    

    I think, this is what you asked for. Sorry for hurry with the first answer. But just note that cmp argument for sorted is not available in python3

    0 讨论(0)
  • 2021-01-19 06:34

    You can use a Counter in Python 2.7+ (this recipe works on 2.5+):

    from collections import Counter
    print Counter([3, 3, 3, 4, 4, 2]).most_common()
    # [(3, 3), (4, 2), (2, 1)]
    
    0 讨论(0)
  • 2021-01-19 06:38

    Why would you choose an O(n**2) algorithm to do this. The alternative to Counter (if you have <2.7) is not too difficult

    >>> from operator import itemgetter
    >>> from collections import defaultdict
    >>> L=[3, 3, 3, 4, 4, 2]
    >>> D=defaultdict(int)
    >>> for i in L:
    ...     D[i]+=1
    ... 
    >>> sorted(D.items(), key=itemgetter(1), reverse=True)
    [(3, 3), (4, 2), (2, 1)]
    
    0 讨论(0)
  • 2021-01-19 06:43

    Try using a collections.Counter:

    from collections import Counter
    data = [3,4,2,3,4,3]
    Counter(data).most_common()
    
    0 讨论(0)
提交回复
热议问题