Cara Mengurutkan Kamus berdasarkan Nilai dengan Python

Pengantar

Kamus dalam Python adalah kumpulan item yang menyimpan data sebagai pasangan nilai kunci. Dalam Python 3.7 dan versi yang lebih baru, kamus diurutkan berdasarkan urutan penyisipan item. Dalam versi sebelumnya, mereka tidak berurutan.

Dalam artikel ini, kita akan melihat bagaimana kita bisa mengurutkan kamus berdasarkan nilai yang dikandungnya.

Urutkan Kamus Menggunakan a untuk Lingkaran

Kita dapat mengurutkan kamus dengan bantuan a for lingkaran. Pertama, kita menggunakan sorted() berfungsi untuk mengurutkan nilai kamus. Kami kemudian mengulang nilai yang diurutkan, menemukan kunci untuk setiap nilai. Kami menambahkan pasangan nilai kunci ini dalam urutan yang diurutkan ke dalam kamus baru.

Catatan: Penyortiran tidak memungkinkan Anda untuk memesan ulang kamus di tempatnya. Kami sedang menulis pasangan terurut dalam kamus kosong yang benar-benar baru.

dict1 = {1: 1, 2: 9, 3: 4}
sorted_values = sorted(dict1.values()) 
sorted_dict = {}

for i in sorted_values:
    for k in dict1.keys():
        if dict1[k] == i:
            sorted_dict[k] = dict1[k]

print(sorted_dict)

Jika Anda menjalankan ini dengan juru bahasa Python, Anda akan melihat:

{1: 1, 3: 4, 2: 9}

Sekarang kita telah melihat cara mengurutkan dengan loop, mari kita lihat alternatif yang lebih populer yang menggunakan sorted() fungsi.

Urutkan Kamus Menggunakan diurutkan () fungsi

Kami sebelumnya menggunakan sorted() berfungsi untuk mengurutkan nilai array. Saat menyortir kamus, kita dapat meneruskan satu argumen lagi ke sorted() berfungsi seperti ini: sorted(dict1, key=dict1.get).

Di sini, key adalah fungsi yang dipanggil pada setiap elemen sebelum nilainya dibandingkan untuk diurutkan. Itu get() metode pada objek kamus mengembalikan nilai kunci kamus.

Grafik sorted(dict1, key=dict1.get) ekspresi akan mengembalikan daftar kunci yang nilainya diurutkan secara berurutan. Dari sana, kita dapat membuat kamus baru yang diurutkan:

dict1 = {1: 1, 2: 9, 3: 4}
sorted_dict = {}
sorted_keys = sorted(dict1, key=dict1.get)  

for w in sorted_keys:
    sorted_dict[w] = dict1[w]

print(sorted_dict) 

Menggunakan sorted() fungsi telah mengurangi jumlah kode yang harus kami tulis saat menggunakan for loop. Namun, kita dapat menggabungkan lebih lanjut sorted() fungsi dengan itemgetter() berfungsi untuk solusi yang lebih ringkas untuk menyortir kamus berdasarkan nilai.

Urutkan Kamus Menggunakan operator Modul dan pengambil barang()

Grafik operator modul termasuk itemgetter() fungsi. Fungsi ini mengembalikan objek yang dapat dipanggil yang mengembalikan item dari objek.

Misalnya, mari kita gunakan itemgetter() untuk membuat objek yang dapat dipanggil yang mengembalikan nilai kamus apa pun dengan kunci yang 2:

import operator

dict1 = {1: 1, 2: 9}
get_item_with_key_2 = operator.itemgetter(2)

print(get_item_with_key_2(dict1))  

Setiap kamus memiliki akses ke items() metode. Fungsi ini mengembalikan pasangan kunci-nilai kamus sebagai daftar tupel. Kita dapat mengurutkan daftar tupel dengan menggunakan itemgetter() berfungsi untuk menarik nilai kedua dari tuple yaitu nilai kunci dalam kamus.

Setelah diurutkan, kita dapat membuat kamus berdasarkan nilai-nilai tersebut:

import operator

dict1 = {1: 1, 2: 9, 3: 4}
sorted_tuples = sorted(dict1.items(), key=operator.itemgetter(1))
print(sorted_tuples)  
sorted_dict = {k: v for k, v in sorted_tuples}

print(sorted_dict) 

Dengan lebih sedikit usaha, kami memiliki kamus yang diurutkan berdasarkan nilai!

Sebagai key argumen menerima fungsi apa pun, kita dapat menggunakan fungsi lambda untuk mengembalikan nilai kamus sehingga dapat diurutkan. Mari kita lihat bagaimana.

Urutkan Kamus Menggunakan Fungsi Lambda

Fungsi Lambda adalah fungsi anonim, atau tanpa nama, dalam Python. Kita dapat menggunakan fungsi lambda untuk mendapatkan nilai item kamus tanpa harus mengimpor operator modul untuk itemgetter(). Jika Anda ingin mempelajari lebih lanjut tentang lambda, Anda dapat membacanya di panduan kami untuk Fungsi Lambda dengan Python.

Lihat panduan praktis dan praktis kami untuk mempelajari Git, dengan praktik terbaik, standar yang diterima industri, dan termasuk lembar contekan. Hentikan perintah Googling Git dan sebenarnya belajar itu!

Mari mengurutkan kamus berdasarkan nilai menggunakan fungsi lambda di key argumen dari sorted():

dict1 = {1: 1, 2: 9, 3: 4}
sorted_tuples = sorted(dict1.items(), key=lambda item: item[1])
print(sorted_tuples)  
sorted_dict = {k: v for k, v in sorted_tuples}

print(sorted_dict)  

Perhatikan bahwa metode yang telah kita bahas sejauh ini hanya berfungsi dengan Python 3.7 dan yang lebih baru. Mari kita lihat apa yang bisa kita lakukan untuk versi Python sebelumnya.

Mengembalikan Kamus Baru dengan Nilai Terurut

Setelah mengurutkan kamus berdasarkan nilai, untuk menyimpan kamus yang diurutkan dalam versi Python sebelum 3.7, Anda harus menggunakan OrderedDict - tersedia di collections modul. Objek-objek ini adalah kamus yang menjaga urutan penyisipan.

Berikut ini contoh pengurutan dan penggunaan OrderedDict:

import operator
from collections import OrderedDict

dict1 = {1: 1, 2: 9, 3: 4}
sorted_tuples = sorted(dict1.items(), key=operator.itemgetter(1))
print(sorted_tuples)  

sorted_dict = OrderedDict()
for k, v in sorted_tuples:
    sorted_dict[k] = v

print(sorted_dict)  

Kesimpulan

Tutorial ini menunjukkan bagaimana kamus dapat diurutkan berdasarkan nilainya. Kami pertama-tama mengurutkan kamus menggunakan dua for loop. Kami kemudian meningkatkan penyortiran kami dengan menggunakan sorted() fungsi. Kami juga telah melihat itemgetter() fungsi dari operator modul dapat membuat solusi kami lebih ringkas.

Terakhir, kami mengadaptasi solusi kami untuk bekerja pada versi Python yang lebih rendah dari 3.7.

Variasi dari sorted() function adalah yang paling populer dan dapat diandalkan untuk mengurutkan kamus berdasarkan nilai.

Stempel Waktu:

Lebih dari penyalahgunaan