Struktur Data Python : Dictionary
[tutorial ini dibuat menggunakan python versi 3.11
]
Dictionary adalah struktur data untuk menyimpan informasi dalam bentuk pasangan kunci-nilai (key-value). Key berfungsi sebagai identifikasi unik untuk setiap value yang disimpan. Dictionary banyak digunakan untuk memetakan dan mengorganisir data dalam Python termasuk mengelola data dari Web API yang umumnya dalam format JSON. Di dalam python Format JSON akan diproses sebagai dictionary.
Dictionary bersifat mutable yang berarti dapat dilakukan operasi penambahan, penghapusan dan manipulasi pasangan key-value. Key dalam dictionary harus bersifat hashable, dan dapat berupa objek apa pun, namun yang paling umum adalah string
, int
dan tuple
. Tidak ada urutan tertentu dalam dictionary, sehingga elemen-elemennya tidak selalu dikembalikan dalam urutan yang sama seperti saat dimasukkan.
Membuat Dictionary
Dictionary pada python ditandai dengan kurung kurawal diikuti dengan nama key dan nilainya dengan format {key_1 : value_1, key_2 : value_2, ...}
. Tipe data dictionary di dalam python adalah dict
. Sehingga objek dictionary juga dapat dibuat melalui inisiasi kelas dict
.
Berikut ini beberapa contoh pembuatan objek dict
pada python:
Kode
# membuat dict dengan {...} pikachu = { "name": "Pikachu", "type": "Electric", "hp": 35, } print(pikachu) # membuat dict dengan inisiasi kelas dict charmander = dict( name="Charmander", type="Fire", hp=39, ) print(charmander) # membuat dict dengan konversi dari list/set/tuple bulba_list = [ ("name", "Bulbasaur"), ("type", "Grass/Poisson"), ("hp", 45), ] bulbasaur = dict(bulba_list) print(bulbasaur)
# OUTPUT {'name': 'Pikachu', 'type': 'Electric', 'hp': 35} {'name': 'Charmander', 'type': 'Fire', 'hp': 39} {'name': 'Bulbasaur', 'type': 'Grass/Poisson', 'hp': 45}
Seperti halnya struktur data lainnya pada python, value di dalam dictionary juga dapat menyimpan tipe data apa saja, mulai dari numerik, string, bahkan list dan dictionary lainnya. Oleh karena itu, sebuah dictionary dapat memiliki struktur yang bersarang.
Berikut adalah contoh dictionary dengan struktur bersarang:
Kode
charizard = { "name": "Charizard", "type": ["Fire", "Flying"], "height": 1.7, "weight": 90.5, "stats": { "HP": 78, "attack": 84, "defense": 78, "speed": 100, "total": 364, "special": {"sp.attack": 109, "sp.defense": 85}, }, }
Pada contoh ini, objek charizard
memiliki struktur yang cukup kompleks. Terdapat 5 pasangan key-value yaitu name
, type
, height
, weight
dan stat
s. Key name
memiliki nilai dengan tipe string
, key height
dan weight
memiliki nilai dengan tipe float
, sementara itu untuk type
dan stats
memiliki tipe data berupa list
dan dict
. Lebih jauh lagi, nilai pada key stats
merupakan sebuah dictionary dengan 6 key-value. Lima diantaranya memiliki tipe int
dan 1 lainnya, yaitu special
merupakan dictionary lainnya dengan dua key-value.
Membaca Item dalam Dictionary
Nilai-nilai dari dictionary dapat diakses dengan key yang dimiliki. Terdapat dua cara dalam penerapannya, yaitu dengan kurung siku [key]
atau dengan metode get(key)
. Perbedaan dua cara ini adalah pada output yang diberikan ketika key
yang diberikan tidak eksis. Pemanggilan menggunakan [key]
akan menghasilkan error KeyError
dan dapat menghentikan program yang berjalan. Adapun menggunakan get(key)
akan mengembalikan nilai None
jika key
tidak eksis.
Mengakses nilai menggunakan key akan mengembalikan objek sesuai dengan tipe data nilai tersebut. Oleh karena itu, jika nilai suatu key bertipe list
, maka nilai yang diperoleh dapat diproses lagi seperti list pada umumnya. Begitu pula jika nilainya berupa dictionary maka dapat kita akses lebih dalam menggunakan pasangan key-value-nya.
Kode
# mengakses key "name" name = charizard["name"] height = charizard["height"] print(f"{name} memiliki tinggi {height} meter") # mengakses key "type" types = charizard["type"] print(f"{name} adalah pokemon {types}") # karena menghasilkan list # maka dapat diakses seperti list umumnya # contoh : mengambil tipe pertama type_1 = charizard["type"][0] print(f"{name} adalah tipe {type_1}") # mengakses stats stats = charizard["stats"] print(f"Statistik {name} : {stats}") # mengkases nilai attack attack = charizard["stats"]["attack"] print(f"{name} memiliki attack sebesar {attack}") # mengkases spesial defence sp_def = charizard["stats"]["special"]["sp.defense"] print(f"{name} memiliki sp. defense sebesar {sp_def}") # mengakses key yang tidak eksis # menggunakan get akan menghasilkan None species = charizard.get("species") print(f"{name} merupakan spesies {species}") # menggunakan [] akan terjadi Error species = charizard["species"]
# OUTPUT Charizard memiliki tinggi 1.7 meter Charizard adalah pokemon ['Fire', 'Flying'] Charizard adalah tipe Fire Statistik Charizard : {'HP': 78, 'attack': 84, 'defense': 78, ...} Charizard memiliki attack sebesar 84 Charizard memiliki sp. defense sebesar 85 Charizard merupakan spesies None
Key-value dalam sebuah dictionary dapat juga diakses secara iteratif menggunakan for loop
. Terdapat dua cara yang dapat digunakan yaitu secara langsung dengan objek dict
nya atau dengan mengakses metode items
pada objek tersebut. ierasi menggunakan objek dict akan mengembalikan key pada setiap iterasinya, sementara menggunakan metode items
kita dapat mengiterasi key dan value sekaligus tanpa harus mengakses objek dictionary-nya lagi.
Kode
pokemon = { "Pikachu": "Electric", "Charmander": "Fire", "Bulbasaur": "Grass", "Squirtle": "Water", } # iterasi dengan key # nama key dapat diganti apapun for key in pokemon: print(f"{key} : {pokemon[key]}") # akses value dengan pokemon[key] print("------------------") # iterasi dengan key dan value # nama key & value dapat diganti apapun for key, value in pokemon.items(): # akses value langsung print(f"{key} : {value}")
# OUTPUT Pikachu : Electric Charmander : Fire Bulbasaur : Grass Squirtle : Water ------------------ Pikachu : Electric Charmander : Fire Bulbasaur : Grass Squirtle : Water
Manipulasi dan Menambah Item
Manipulasi data dictionary dapat dilakukan dengan cara yang sama seperti cara mengaksesnya. Cukup dengan memberikan nilai baru pada key yang diinginkan. Cara ini juga dapat berlaku untuk menambah key baru jika key tersebut tidak eksis pada dictionary.
Pada contoh berikut ini dilakukan perubahan beberapa item pada objek charizard
yaitu name
, type
, attack
dan sp.attack
. Selain itu ditambahkan juga item baru dengan key species
dan nilai "Flame Pokemon"
.
Kode
# merubah nilai untuk ke name charizard["name"] = "Mega Charizard X" # menambah type "Dragon" charizard["type"].append("Dragon") # menambah elemen pada list # merubah nilai attack charizard["stats"]["attack"] = 130 # merubah sp. attack charizard["stats"]["special"]["sp.attack"] = 130 # menambah key baru yang belum ada charizard["species"] = "Flame Pokemon" print(charizard)
# OUTPUT # note : secara default output akan dicetak dalam 1 baris { 'name': 'Mega Charizard X', 'type': ['Fire', 'Flying', 'Dragon'], 'height': 1.7, 'weight': 90.5, 'stats': { 'HP': 78, 'attack': 130, 'defense': 78, 'speed': 100, 'total': 364, 'special': {'sp.attack': 130, 'sp.defense': 85}}, 'species': 'Flame Pokemon' }
Menghapus Item
Item pada dictionary dapat dihapus menggunakan dua cara yaitu melalui keyword del
dan metode pop
. Penghapusan dengan metode pop
akan mengembalikan item yang dihapus, artinya nilai yang akan dihapus dapat disimpan ke variabel jika diperlukan.
Pada contoh berikut, dilakukan penghapusan terhadap item dengan key "stats"
menggunakan keyword del
. Setelah proses ini dapat dilihat bahwa objek charizard
tidak lagi memiliki key stats
.
Selanjutnya dilakukan penghapusan pada item "type"
menggunakan metode pop
. hasil dari metode ini disimpan pada variabel popped_item
. Proses ini membuat objek charizard
tidak lagi memiliki item "type"
. Namun item tersebut masih dapat diakses karena disimpan pada variabel popped_item
.
Kode
# menghapus key 'stats' del charizard["stats"] print("Charizard tanpa stats :\n") print(charizard) print("\n------------------------------\n") # menghapus dengan pop # mengembalikan nilai key yang dihapus # dapat disimpan pada variabel popped_item = charizard.pop("type") print(f"item yang dihapus : {popped_item}\n") print(charizard)
# OUTPUT Charizard tanpa stats : {'name': 'Mega Charizard X', 'type': ['Fire', 'Flying', 'Dragon'], 'height': 1.7, 'weight': 90.5, 'species': 'Flame Pokemon'} ------------------------------ item yang dihapus : ['Fire', 'Flying', 'Dragon'] {'name': 'Mega Charizard X', 'height': 1.7, 'weight': 90.5, 'species': 'Flame Pokemon'}
Menggabung Dictionary
Dua dictionary dapat digabungkan menggunakan metode dict_1.update(dict_2)
. Metode ini akan menambahkan atau memperbarui item dari dictionary yang memanggil (dict_1
). Jika terdapat key yang sama pada dua dictionary maka data yang lama akan diupdate menggunakan nilai dari dictionary yang ditambahkan.
Berikut ini disajikan contoh-contoh penggabungan dua dictionary. Pada contoh pertama,dictionary yang digabungkan tidak memiliki key yang sama. Sementara itu pada contoh kedua, objek bulbasaur
memiliki key hp
dengan nilai 0
dan pada dictionary bulbasaur_stats
juga terdapat key yang sama dengan nilai 45
. Oleh karena itu, saat objek bulbasaur
diupdate dengan objek bulbasaur_stats
, nilai untuk key hp
akan diupdate mengikuti nilai bulbasaur_stats
yaitu 45.
Kode
# update dictionary pikachu = { "name": "Pikachu", "type": "Electric", "hp": 35, } print(f"Data Pikachu : {pikachu}") pikachu_stats = { "attack": 55, "defense": 40, "speed": 90 } # update pikachu pikachu.update(pikachu_stats) print(f"Data Pikachu (upd) : {pikachu}") print("\n------------------------\n") # update jika terdapat key sama bulbasaur = { "name": "Bulbasaur", "type": "Poisson", "hp": 0, } print(f"Data Bulbasaur : {bulbasaur}") bulbasaur_stats = { "hp": 45, "attack": 49, "defense": 49, "speed": 45, } # update bulbasaur bulbasaur.update(bulbasaur_stats) print(f"Data Bulbasaur (upd) : {bulbasaur}")
# OUTPUT Data Pikachu : {'name': 'Pikachu', 'type': 'Electric', 'hp': 35} Data Pikachu (upd) : {'name': 'Pikachu', 'type': 'Electric', 'hp': 35, 'attack': 55, 'defense': 40, 'speed': 90} ------------------------ Data Bulbasaur : {'name': 'Bulbasaur', 'type': 'Poisson', 'hp': 0} Data Bulbasaur (upd) : {'name': 'Bulbasaur', 'type': 'Poisson', 'hp': 45, 'attack': 49, 'defense': 49, 'speed': 45}
Ringkasan
Pada bagian ini kita sudah mempelajari struktur data dictionary pada python. Dictionary merupakan struktur data berupa pasangan key-value. Item pada dictionary dapat diakses menggunakan key yang bersesuaian atau dapat juga dilakukan iterasi untuk mengakses setiap item pada dictionary tersebut.Dictionary bersifat mutable sehingga dapat dilakukan operasi penambahan, penghapusan serta update data termasuk menggabungkan item-item dari dua dictionary.
Dasar-Dasar Pemrograman dengan Python
Selanjutnya : Bekerja dengan Fungsi