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)]