Group list by values

后端 未结 7 1606
说谎
说谎 2020-12-01 03:09

Let\'s say I have a list like this:

mylist = [["A",0], ["B",1], ["C",0], ["D",2], ["E",2]]

7条回答
  •  谎友^
    谎友^ (楼主)
    2020-12-01 03:49

    from operator import itemgetter
    from itertools import groupby
    
    lki = [["A",0], ["B",1], ["C",0], ["D",2], ["E",2]]
    lki.sort(key=itemgetter(1))
    
    glo = [[x for x,y in g]
           for k,g in  groupby(lki,key=itemgetter(1))]
    
    print glo
    

    .

    EDIT

    Another solution that needs no import , is more readable, keeps the orders, and is 22 % shorter than the preceding one:

    oldlist = [["A",0], ["B",1], ["C",0], ["D",2], ["E",2]]
    
    newlist, dicpos = [],{}
    for val,k in oldlist:
        if k in dicpos:
            newlist[dicpos[k]].extend(val)
        else:
            newlist.append([val])
            dicpos[k] = len(dicpos)
    
    print newlist
    

提交回复
热议问题