Ada banyak metode untuk mengurutkan elemen dengan python tetapi hari ini kita akan mempelajari pengurutan tipe data dengan python menggunakan operator.itemgetter dan operator.attrgetter.

1. Pengertian operator.itemgetter(attribute) atau operator.itemgetter(*attribute)

Mengembalikan objek yang dapat dipanggil yang mengambil item dari __getitem__() operannya

Saya. Menggunakan itemgetter pada kamus untuk mengambil pasangan nilai kunci.

from operator import itemgetter
itemgetter('car_name')({'car_name':'x4','company':'BMW'})
output: 'x4'

ii. Menggunakan itemgetter untuk mengambil elemen daftar.

itemgetter(2)([1,2,3,4,5])
output: 3

2. Pengertian operator.attrgetter(atribut) atau operator.attrgetter(*atribut)

mengembalikan objek yang dapat dipanggil yang mengambil atribut dari operannya.

from operator import attrgetter
class Movie:
  def __init__(self,name,date):
       self.name = name
       self.date = date
movie = Movie('TheDarkKnight',"2012")

Mengambil atribut nama dan (nama & tanggal) objek film

attrgetter('name')(movie)
  Output: 'TheDarkKnight'
attrgetter('name','date')(movie)
  Output: ('TheDarkKnight', '2012')

3. Menggunakan fungsi-fungsi ini untuk menyortir

Di bawah ini adalah film-film Marvel yang dirilis pada bulan April dan kita ingin mengurutkannya berdasarkan tanggal dan nama, kita dapat menggunakan itemgetter

movies = [{'name':'Avengers Endgame','date':'26/4/2019'},
          {'name':'Iron Man 3','date':'26/4/2013'},
          {'name':'Avengers: Age of Ultron','date':'24/4/2013'}
]

Menyortir berdasarkan 'nama'

sorted(movies, key=itemgetter('name'))
#equivalent to "sorted(movies, key = lambda x: x['name'])"
Output:[{'name': 'Avengers Endgame', 'date': '26/4/2019'},
 {'name': 'Avengers: Age of Ultron', 'date': '24/4/2013'},
 {'name': 'Iron Man 3', 'date': '26/4/2013'}]

Menyortir berdasarkan 'tanggal'

sorted(movies, key=itemgetter('date'))
#equivalent to "sorted(movies, key = lambda x: x['date'])"
Output: [{'name': 'Avengers: Age of Ultron', 'date': '24/4/2013'},
 {'name': 'Iron Man 3', 'date': '26/4/2013'},
 {'name': 'Avengers Endgame', 'date': '26/4/2019'}]

Menyortir menurut persamaan 'nama' dan 'tanggal'

sorted(movies ,key = itemgetter('name','date')) 
#equivalent to "sorted(movies, key = lambda x: (x['name],x['date']))"
[{'name': 'Avengers Endgame', 'date': '26/4/2019'},
 {'name': 'Avengers: Age of Ultron', 'date': '24/4/2013'},
 {'name': 'Iron Man 3', 'date': '26/4/2013'}]

sehingga kita dapat melihat lambda dan itemgetter memiliki fungsi yang sama tetapi itemgetter sedikit lebih cepat daripada lambda sehingga ketika kecepatan eksekusi dan memori menjadi perhatianitemgetter direkomendasikan.

4. Menggunakanattrgetter untuk mengurutkan objek.

Misalnya, Anda memiliki objek yang perlu diurutkan berdasarkan salah satu atributnya, tetapi dengan python, kami tidak mungkin melakukan ini saat ini, attrgetter datang untuk menyelamatkan. mari kita lanjutkan dengan contoh yang sama seperti di atas.

class Movie:
    def __init__(self,movie_name,movie_date):
        self.movie_name = movie_name
        self.movie_date = movie_date
    def __repr__(self):
        return 'Movie({},{})'.format(self.movie_name,self.movie_date)
movies = [Movie('Avengers Endgame','26/4/2019'),Movie('Iron Man 3','26/4/2013'), Movie('Avengers: Age of Ultron','24/4/2013')]

Sekarang mari kita urutkan objek film berdasarkan tanggal rilis

sorted(movies,key=attrgetter('movie_date'))
# equavilent to sorted(movies, key= lambda x : x.movie_date)
Output: [Movie(Avengers: Age of Ultron,24/4/2013),
 Movie(Iron Man 3,26/4/2013),
 Movie(Avengers Endgame,26/4/2019)]

Referensi: Jones, D., 2013. Buku Masak Python, Edisi ke-3. O'Reilly Media, Inc.